Conceptul REZUMAT
Conceptul REZUMAT
La crearea web a proiectului Bitrix platforma-cadru disponibile funcționalități extinse „din cutie“, care poate fi utilizat prin apelarea API module adecvate. In plus, fiecare unitate în cadrul conceptului este o unitate de operare independentă, care oferă o soluție la un anumit interval de sarcini.
De obicei, API-ul fiecărui modul este dezvoltat pe baza activității specifice, și de multe ori formatului de apel diferă de la modul la modul. Pentru a reduce aceste diferențe la un nivel minim funcționalitatea de bază, care este prezent în aproape fiecare modul, este standardizat. Acest CRUD-operare: Create, Read, Update, Delete (a crea, citi, actualiza și șterge date).
conceptul entitate
Essence - un set de o colecție de obiecte cu logica de bază intrinsecă (nivel scăzut) de afaceri. Esența are un set de caracteristici, ale căror valori sunt supuse anumitor reguli de prelucrare.
De exemplu, esența utilizatorului - un set de utilizatori cu un set de domenii:
Atunci când acest ID este eliberat în mod automat la baza de date, Ultimul nume este limitat la 50 de caractere în lungime, conectare trebuie să conțină numai litere, cifre și subliniere semn și așa mai departe.
În loc de programare fiecare astfel de entitate, ne-ar dori să-l descrie într-un format specific. O astfel de descriere ar fi manipulate de către nucleul sistemului, a fost pentru el un fel de configurație:
De exemplu, într-un mod similar poate fi descrisă ca un catalog de cărți în care sistemul se va monitoriza corectitudinea integrității datelor: Verificați formatul și intrarea în intervalul acceptabil.
câmpuri de tastare
Pentru configurația entităților care nu sunt utilizate mijloace de marcare (XML, YML etc.) este utilizat în locul php. Această opțiune vă oferă flexibilitate maximă și oportunități de dezvoltare.
Se pare că definiția tipurilor de date în exemplul de mai sus:
Atenție! În ciuda faptului că, în exemplul spiritului însemnat Book (Cartea), anexată la numele clasei sufixul: BookTable. Acest lucru se face în mod intenționat - numele descriptiv al clasei entitate trebuie să se termine întotdeauna cu cuvântul tabel. Numele principal de carte în același spațiu de nume este considerată a fi rezervată în viitor să fie utilizat nume principal (în acest caz - clasa de carte) pentru a reprezenta elementele naturii sub formă de obiecte (în prezent, date de esență sunt matrice, ca în vechile metode getList).
Pentru descrierea structurii corespunde în esență getMap () metoda. care returnează un tablou de specimene de câmp.
Fiecare tip de câmp este reprezentat sub forma unei clase derivate Entitate \ ScalarField - aceste câmpuri sunt de lucru cu valori scalare simple, care sunt stocate în baza de date „ca atare“. 8 din aceste tipuri sunt disponibile în mod implicit:
câmp se recomandă să fie numit în majuscule În codificare respectarea standardelor. Numele trebuie să fie unic în cadrul unei singure entități.
De obicei, proiectantul a câmpului în primul parametru a trecut la numele câmpului, iar al doilea argument - setările avansate. Setările generale sunt discutate mai târziu în acest capitol, dar există setări specifice pentru BooleanField și EnumField:
Pentru BooleanField, din moment ce adevărat și fals nu pot fi stocate ca atare în baza de date, cartografiere valorile date în forma unei matrice, în care primul element de stocare înlocuiește fals, iar al doilea adevărat.
Notă. în descrierea esenței, puteți seta numele tabelei în metoda getTableName. în acest exemplu, `my_book`. Dacă nu definiți această metodă, numele tabelului va fi generat automat din spațiile de nume și numele de clasă pentru entitatea va fi `b_somepartner_mybookscatalog_book`.
primar autoincrement necesar
În cele mai multe cazuri, o entitate are o cheie primară pe un câmp. El este, de regulă, este un auto-increment. Pentru a vorbi despre acest fapt, trebuie să utilizați opțiunile din constructorul domeniu:
Notă. cheie primară compozit este, de asemenea, posibilă. De exemplu, în relațiile dintre cele două entități vor fi un compozit ID-cheie ambele entități. Pentru a afla mai multe despre acest lucru și a vedea un exemplu în secțiunea N: relațiile M.
Deci, declară câmpurile care aparțin cheii primare. Cu această opțiune, esența este de a controla de introducere a datelor și nu se va adăuga o intrare fără a specifica o valoare pentru cheia primară. Când actualizați sau ștergeți înregistrările pot fi identificate numai pe cheia primară.
Adesea, aceasta nu indică în mod clar valoarea ID-ul, dar este obținut din baza de date după ce a adăugat cu succes înregistrarea. În acest caz, este necesar să se informeze esența:
„Completarea automată“ pavilion. pentru esența înseamnă că, atunci când adăugați un nou record, nu este necesar să se solicite dezvoltator pentru a seta valoarea acestui câmp. În mod implicit, această cerință se aplică numai domeniile cheie primară, dar puteți cere ca sistemul să solicite instalarea oricărui alt domeniu:
Acum va fi imposibil să adăugați o carte nouă, fără a preciza codul ISBN.
Numele coloanei Mapping
În descrierea naturii tabelelor existente pot fi tentat să sun într-o altă coloană. De exemplu, inițial în tabel `câmp my_book` ISBN numit ca ISBNCODE, iar vechiul cod folosește numele unei coloane în interogări SQL. Dacă doriți să optimizați numele unui ISBN mai ușor de citit, atunci această opțiune va ajuta la „COLUMN_NAME“ în noul API:
Există și alte cazuri în care o coloană fizică unică în tabel stochează valori diferite în sensul. În acest caz, puteți crea mai multe domenii de natură, care vor avea aceeași „COLUMN_NAME“.
expresii ExpressionField
Nu sunt numai date de magazin așa cum este, dar, de asemenea convertirea lor la eșantion. Să presupunem că a existat o cerință pe picior de egalitate cu data publicării primi imediat vârsta carte în zile. Păstrați acest număr în baza de date este scump: va trebui să conta în fiecare zi pentru a actualiza datele. Puteți să-l lua doar la vârsta bazei de date:
Pentru a face acest lucru, trebuie să descrie, de fapt, un domeniu virtuale, valoarea care se bazează pe SQL-expresie cu un alt câmp sau câmpuri:
Primul parametru, ca și în alte domenii, este dat un nume. Al doilea parametru este necesar pentru a transmite textul instrucțiunii SQL, dar alte domenii ale naturii trebuie să fie înlocuite cu substituenților în conformitate cu formatul sprintf. Al treilea parametru trebuie sa treaca o serie de nume de câmp, în esență, într-o anumită ordine, care a fost stabilit într-o expresie.
Notă. așa cum a recomandat substituenților `% or`% s` 1 s` $,`% 2 $ și așa mai departe s`. De exemplu, atunci când Expr expresia implică mai multe domenii (FIELD_X + FIELD_Y) * FIELD_X. expresia poate fi descrisă după cum urmează: '(% s +% s) *% s', [FIELD_X, FIELD_Y, FIELD_X]; sau după cum urmează: '(1% $ s +% 2 $ s) *% 1 $ s', [FIELD_X, FIELD_Y].
Foarte frecvent expresia poate fi aplicată pentru agregarea datelor (de exemplu, COUNT (*) sau SUM (FIELD)), astfel de exemple vor fi discutate în capitolul mostră de date.
Notă. câmpurile de expresie pot fi folosite numai atunci când datele eșantion: selectați, filtru, de grup și sortați. Ca astfel de coloane fizice în tabelul bazei de date nu este prezent, nu există nici un loc pentru a scrie în jos valoarea câmpului: sistemul va genera o excepție.
câmpuri personalizate
În plus față de câmpurile și ScalarField ExpressionField. entitate poate cuprinde un câmp de utilizator. Acestea sunt configurate prin interfața administrativă și nu necesită o descriere suplimentară pe partea naturii. Tot ceea ce este necesar pentru a indica în esență, este obiectul selectat este un câmp personalizat:
În viitor, este necesar să se precizeze acest identificator, atunci când atașarea unui câmp personalizat în esența:
Astfel, este posibil să se selecteze și să actualizeze valorile câmpurilor definite de utilizator pe picior de egalitate cu valori în esență câmpuri regulate.
Conform rezultatelor acestui capitol următoarele entități primite:
Astfel, este posibil să se descrie în mod esențial câmp scalar convențional, selectați o cheie primară, specificați automat câmpurile de creștere și ce câmpuri trebuie să fie completate. Când se trece numele coloanei în tabel și numele dorit entității va fi în măsură să rezolve acest punct.
Atenție! Metoda getMap este folosită doar ca primirea entității de configurare inițială. Dacă doriți să obțineți o listă de natura reală a câmpurilor, utilizați metoda BookTable :: getEntity () -> getFields ().
Rămâne doar să se stabilească natura codului în proiect. În conformitate cu regulile generale de denumire a fișierelor în D7, esența codul pe care doriți să salvați fișierul: local / module / somepartner.mybookscatalog / lib / book.php
După aceea, sistemul se va conecta automat atunci când apelează clasa de fișiere BookTable.