Comprendere gli oggetti del Registro di sistema e del Loader in OpenCart

introduzione

OpenCart è diventato un sistema di eCommerce molto utile per negozi online di piccole e medie dimensioni. Sebbene fornisca funzionalità complete nel suo stack, mantiene una struttura semplice, con una bella architettura modulare che può essere estesa. In questo articolo, ci concentreremo su alcuni elementi del processo di avvio automatico.

Sebbene ci siano molti componenti coinvolti nel tipico processo di bootstrap, ci concentreremo sugli oggetti "Registry" e "Loader" per il corso di questo tutorial. I frammenti di codice spiegati in questo articolo appartengono a OpenCart versione 2.0.x. Sebbene il codice di classe "Registry" sia lo stesso nelle versioni 1.5.xe 2.0.x, il codice di classe "Loader" è cambiato molto. Quindi ci concentreremo sulla versione 2.0.x di OpenCart.

L'oggetto del registro

Come suggerisce il nome, l'oggetto "Registro" viene utilizzato per memorizzare elementi, da semplici variabili a oggetti complessi, quando viene chiamato il metodo "set". Memorizza tutti gli elementi usando "chiave", quindi in seguito è possibile accedervi facilmente quando viene chiamato il metodo "get". 

Diamo uno sguardo più da vicino al file di classe stesso. Apri il file che si trova in "system / engine / registry.php" nel tuo editor di testo preferito!

dati [$ chiave])? $ this-> data [$ key]: null);  set di funzioni pubbliche ($ chiave, $ valore) $ questo-> dati [$ chiave] = $ valore;  public function ha ($ key) return isset ($ this-> data [$ key]); 

Come puoi vedere, la definizione della classe è abbastanza semplice da capire. Memorizza tutto nella proprietà "data" dell'oggetto, che viene dichiarata come matrice e l'ambito è privato. Nel metodo "get", controlla se "value" è disponibile per la "chiave" desiderata e restituisce il valore se è disponibile e "null" in caso contrario. Nel metodo "set", inserisce il nuovo elemento nell'array "data" utilizzando gli argomenti passati al metodo. Infine, fornisce il metodo "ha" per verificare se una certa "chiave" è già impostata nella matrice "dati".

Ora, vediamo come il framework OpenCart utilizza l'oggetto del registro durante la fase iniziale dell'esecuzione della pagina. Apri il file "index.php" nella root del documento di OpenCart. Vedrai il $ registro l'oggetto viene creato molto presto nell'esecuzione dello script.

// Registry $ registry = new Registry ();

Dopo la creazione del $ registro oggetto, memorizza molti altri oggetti usando il metodo "set". Vediamo un paio di esempi.

set ('carica', $ loader); // Config $ config = new Config (); $ registry -> set ('config', $ config); // Database $ db = nuovo DB (DB_DRIVER, DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE); $ registry -> set ('db', $ db); // Request $ request = new Request (); $ registry -> set ('richiesta', $ richiesta); // Session $ session = new Session (); $ registry -> set ('sessione', $ sessione);

Ho elencato qui alcuni esempi di utilizzo di $ registro oggetto. Come avrai notato, gli oggetti usati di frequente vengono creati e archiviati nel registro. Il motivo è che non devi istanziare oggetti di classe comuni più volte, quindi puoi semplicemente chiamare il metodo "ottieni" di $ registro oggetto per usare l'oggetto desiderato. L'approccio è in qualche modo simile al "Singleton Pattern", nel quale sei costretto a mantenere una singola istanza della classe.

Ora il $ registro l'oggetto è popolato di cose utili, ma come viene utilizzato? Vediamo come $ db oggetto memorizzato nel $ registro è utilizzato nel modello "Attività" del modulo "Account". Apri il file che si trova in "catalogo / modello / account / activity.php". Puoi vedere che nel metodo "addActivity" viene lanciata una query di inserimento.

$ this-> db-> query ("INSERT INTO" ". DB_PREFIX." customer_activity 'SET' customer_id '=' ". (int) $ customer_id." ',' chiave '=' ". $ this-> db- > escape (chiave $). "',' data '='". $ this-> db-> escape (serialize ($ data)). "',' ip '='". $ this-> db-> escape ($ this-> request-> server ['REMOTE_ADDR']). "',' date_added '= NOW ()");

Potresti chiederti come viene chiamato, in quanto non esiste un metodo "db" o una proprietà definita nella classe "ModelAccountActivity". È possibile passare alla classe del modello principale "Modello" per vedere se è stata definita lì o meno. Sì, non troverai nemmeno un metodo "db" o proprietà in quella classe. Ma se osservi attentamente la classe "Modello", vedrai che implementa i metodi magici, in particolare il metodo "__get" in questo caso.

funzione pubblica __get (chiave $) return $ this-> registry-> get ($ key); 

Per ora, supponiamo che il $ registro l'oggetto è memorizzato nella proprietà "registro" protetta della classe "Modello". Vedremo come viene memorizzato quando "Model" viene istanziato nella classe "Loader". 

Il __ottenere il metodo viene chiamato quando chiami un metodo che non è definito nella classe. In questo metodo, "db" viene passato come argomento mentre stiamo cercando di chiamare $ This -> db nel file "activity.php". E come discusso in precedenza, $ registro ha tutti gli oggetti di utilità già memorizzati durante il processo di avvio automatico. Quindi dobbiamo solo recuperare l'oggetto "db" usando la chiave chiamando il metodo "get" dell'oggetto "Registry"!

Nello stesso modo, $ This -> carico funziona anche dai file del controller. Nel complesso, "Registry" è un componente davvero utile del framework OpenCart che memorizza le variabili e gli oggetti di uso comune, che vengono utilizzati durante l'esecuzione dello script.

L'oggetto Loader

L'oggetto "Loader" viene utilizzato per caricare i diversi componenti di OpenCart come richiesto, come modello, controller, lingua, vista, libreria, ecc. È importante notare qui che quando viene creato l'oggetto "Loader", viene memorizzato nel $ registro oggetto con "carica" ​​come una chiave di array. Quindi puoi accedere a $ loader oggetto usando a $ This -> carico chiamare come spiegato nella sezione precedente.

// Loader instantiation $ loader = new Loader ($ registry); $ registry -> set ('carica', $ loader);

Ora, vediamo come vengono caricati diversi componenti usando "Loader". Apri "system / engine / loader.php" per vedere la definizione di una classe "Loader". Inizieremo con il metodo "controller" per capire come funziona.

// load controller $ this-> load-> controller ('common / column_left');

È un frammento di codice che carica il controller "common / column_left.php" e chiama anche il metodo "index". Facciamo questa chiamata per ottenere l'output XHTML della "Left Column" della pagina OpenCart. Il $ This -> carico parte funziona in modo simile a $ This -> db esempio che ho spiegato prima! Quindi, restituisce il $ loader oggetto memorizzato nel $ registro, e infine chiamerà il metodo "controller" della classe "Loader"!

Allo stesso modo, i seguenti frammenti funzionano per caricare diversi componenti.

// carica Model $ this -> load -> model ('catalog / category'); // load Visualizza $ this -> load -> view ('default / template / product / category.tpl', $ data); // carica la libreria $ this -> load -> library ('user'); // load Helper $ this -> load -> helper ('json'); // load Language $ this -> load -> language ('product / category');

Osservando le definizioni dei metodi nella classe "Loader", vedrai che non è così complicato capire esattamente come funziona. Innanzitutto, prepara il "percorso file" per il componente corrispondente ed è incluso utilizzando la funzione "include_once".

Nel complesso, "Registry" e "Loader" sono due componenti molto importanti nel framework OpenCart che rendono le cose molto più semplici per gli sviluppatori di moduli.

Conclusione

Così oggi abbiamo esaminato i componenti "Loader" e "Registry" del framework OpenCart. Spero tu abbia imparato qualcosa di utile in questo tutorial. E spero, mi verrà in mente qualcosa di più sullo stesso argomento! Invia le tue domande e i tuoi suggerimenti utilizzando il feed sottostante!