Înțelegerea obiectelor din Registry și Loader în OpenCart

Introducere

OpenCart a devenit un cadru eCommerce foarte util pentru magazinele de dimensiuni mici și mijlocii. Deși oferă caracteristici complexe în stackul său, acesta menține un cadru simplu, cu o arhitectură modulară frumoasă care poate fi extinsă. În acest articol, ne vom concentra pe anumite elemente ale procesului de bootstrapping.

Deși există o mulțime de componente care sunt implicate în procesul tipic de bootstrapping, ne vom concentra pe obiectele "Registry" și "Loader" pentru cursul acestui tutorial. Fragmentele de cod explicate în acest articol aparțin OpenCart versiunea 2.0.x. Deși codul de clasă "Registry" este același în versiunile 1.5.x și 2.0.x, codul clasei "Loader" sa schimbat foarte mult. Deci, ne vom concentra pe versiunea 2.0.x a OpenCart.

Obiectul Registry

După cum sugerează și numele, obiectul "Registry" este folosit pentru stocarea elementelor, de la simple variabile la obiecte complexe, atunci când este apelată metoda "set". Stochează toate elementele folosind "cheia", astfel încât mai târziu ele pot fi accesate cu ușurință atunci când este apelată metoda "get". 

Să aruncăm o privire mai atentă la fișierul de clasă. Deschideți fișierul situat în "system / engine / registry.php" în editorul dvs. de text preferat!

date [$ key])? $ this-> data [$ cheie]: null);  set de funcții publice ($ cheie, valoarea $) $ this-> data [$ key] = $ value;  funcția publică are ($ key) return isset ($ this-> data [$ key]); 

După cum puteți vedea, definiția clasei este destul de simplă. Stochează totul în proprietatea "date" a obiectului, care este declarat ca o matrice, iar domeniul de aplicare este privat. În metoda "get", verifică dacă "valorii" este disponibilă pentru "cheia" dorită și returnează valoarea dacă este disponibilă și altfel "null". În metoda "set", introduce elementul nou în matricea "date" folosind argumentele transmise metodei. În cele din urmă, acesta oferă metoda "has" pentru a verifica dacă o anumită "cheie" este deja introdusă în matricea "data".

Acum, să vedem cum cadrul OpenCart utilizează obiectul de registru în timpul fazei inițiale a execuției paginii. Deschideți fișierul "index.php" din rădăcina de documente a OpenCart. Veți vedea $ registru obiect este creat foarte devreme în execuția scriptului.

// Registrul $ registry = Registrul nou ();

După crearea postului $ registru obiect, stochează mai multe obiecte folosind metoda "set". Să vedem câteva exemple.

set ('încărcare', $ încărcător); // Config $ config = Config nou (); $ registry -> set ('config', $ config); // Bază de date $ db = DB noi (DB_DRIVER, DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE); $ registry -> set ('db', $ db); // Cerere $ request = new Cerere (); $ registry -> set ("cerere", solicitare $); // Session $ session = sesiune nouă (); $ registry -> set ('sesiune', sesiune $);

Am enumerat aici câteva exemple de utilizări ale $ registru obiect. După cum probabil ați observat, obiectele utilizate frecvent sunt create și stocate în registry. Motivul este că nu trebuie să instanțiați obiecte de clasă obișnuită de mai multe ori, astfel încât să puteți apela pur și simplu metoda "get" a $ registru obiect de a utiliza obiectul dorit. Abordarea este oarecum similară cu modelul "Singleton", în care ești obligat să păstrezi o singură instanță a clasei.

Acum $ registru obiect este populate cu lucruri utile, dar cum este folosit? Să vedem cum $ db obiect stocat în $ registru este utilizat în modelul "Activitate" al modulului "Cont". Deschideți fișierul aflat la "catalog / model / account / activity.php". Puteți vedea că în metoda "addActivity", este interogată o inserare.

$ this-> db-> interogare ("INSERT INTO" ". DB_PREFIX" customer_activity "SET" customer_id "= ' > escape ($ key). "',' data '=' '. $ this-> db-> escape (serialize ($ data) evacuare ($ this-> request-> server ['REMOTE_ADDR']). '', 'date_added' = ACUM () ");

S-ar putea să vă întrebați cum se numește, deoarece nu există o metodă sau o proprietate "db" definite în clasa "ModelAccountActivity". Puteți merge la modelul părinte "Model" pentru a vedea dacă este definit acolo sau nu. Da, nu veți găsi nici o metodă "db" sau o proprietate în acea clasă. Dar, dacă te uiți atent la clasa "Model", vei vedea că implementează metodele magice, în special metoda "__get" în acest caz.

funcția publică __get (cheia $) return $ this-> registry-> get (cheia $); 

Pentru moment, să presupunem că $ registru obiect este stocat în proprietatea protejată "registru" a clasei "Model". Vom vedea cum este stocat atunci când "Modelul" este instanțiat în clasa "Loader". 

__obține metoda se numește atunci când apelați orice metodă care nu este definită în clasă. În această metodă, "db" este trecut ca un argument pe care încercăm să-l apelăm $ This -> db în fișierul "activity.php". Și așa cum am discutat mai devreme, $ registru are toate obiectele utilitare deja stocate în timpul procesului de bootstrapping. Așa că trebuie să preluăm obiectul "db" folosind cheia apelând metoda "get" a obiectului "Registry"!

In acelasi fel, $ This -> de încărcare funcționează și din fișierele controlerului. Deci, în ansamblu, "Registrul" este o componentă foarte utilă a cadrului OpenCart care stochează variabilele și obiectele utilizate în mod obișnuit, care sunt folosite pe parcursul executării scenariului.

Obiectul Loader

Obiectul "Loader" este folosit pentru încărcarea diferitelor componente ale OpenCart după cum este necesar, cum ar fi modelul, controlerul, limba, vizualizarea, biblioteca etc. Este important să rețineți că atunci când obiectul "Loader" este creat, acesta este stocat în $ registru obiect cu "sarcină" ca cheie de matrice. Deci puteți accesa $ încărcător obiect folosind un a $ This -> de încărcare apel așa cum este explicat în secțiunea de mai sus.

// Loader instanțiere $ loader = Loader nou ($ registry); $ registry -> set ('încărcare', $ încărcător);

Acum, să vedem cum sunt încărcate diferite componente utilizând "Loader". Deschideți "system / engine / loader.php" pentru a vedea definiția unei clase "Loader". Vom începe cu metoda "controller" pentru a înțelege cum funcționează.

// încărcați controlerul $ this-> load-> controller ('common / column_left');

Este un fragment de cod care încarcă controlerul "common / column_left.php" și apelează și metoda "index". Facem acest apel pentru a obține ieșirea XHTML a "coloanei stângi" a paginii OpenCart. $ This -> de încărcare o parte funcționează similar cu $ This -> db exemplu pe care l-am explicat mai devreme! Astfel, returnează $ încărcător obiect stocat în $ registru, și în cele din urmă se va numi metoda "controller" a clasei "Loader"!

În același mod, următoarele fragmente funcționează pentru a încărca componente diferite.

// încărcați modelul $ this -> load -> model ('catalog / category'); // load Afișați $ this -> load -> view ('default / template / product / category.tpl', $ data); // încărcați biblioteca $ this -> load -> library ('user'); // încărcați Helper $ this -> load -> helper ('json'); // load Limba $ this -> load -> language ('produs / categorie');

Privind definițiile metodei din clasa "Loader", veți vedea că nu este așa de complicat să înțelegeți exact cum funcționează. Mai întâi, pregătește "calea fișierului" pentru componenta corespunzătoare și este inclusă utilizând funcția "include_once".

În general, "Registry" și "Loader" sunt două componente foarte importante în cadrul OpenCart care fac lucrurile mult mai ușor pentru dezvoltatorii de module.

Concluzie

Așadar, astăzi, am analizat componentele "Loader" și "Registrul" din cadrul OpenCart. Sper că ați învățat ceva util în acest tutorial. Și, sperăm, voi veni cu ceva mai mult pe același subiect! Trimiteți-vă întrebările și sugestiile utilizând feed-ul de mai jos!

Cod