Come sviluppatore di CodeIgniter, a volte si finisce in una situazione che richiede di modificare il core del framework o il flusso di esecuzione per soddisfare i requisiti personalizzati. Ovviamente, non è mai consigliabile modificare i file core poiché rende il processo di aggiornamento ingombrante. Fortunatamente, il framework CodeIgniter viene fornito con il sistema hooks, che consente di gestire questo scenario.
In questo articolo, inizieremo con un'introduzione al sistema di hooks nel framework CodeIgniter. Quindi, discuteremo i diversi tipi di hook disponibili. Infine, cogliamo questa opportunità per esplorare la creazione di ganci personalizzati.
Diamo una rapida occhiata a ciò che la documentazione ufficiale di CodeIgniter dice sul sistema di hook:
La funzione Hook di CodeIgniter fornisce un mezzo per attingere e modificare i meccanismi interni del framework senza l'hacking dei file core.
Sembra abbastanza auto-esplicativo, vero? Nel tuo sviluppo di applicazioni quotidiane, se ti trovi mai tentato di modificare i file di CodeIgniter principali, dovresti prima considerare il sistema di hooks per vedere se soddisfa i tuoi requisiti.
Supponiamo che tu voglia costruire un sistema di benchmark delle prestazioni personalizzato per monitorare l'esecuzione dell'applicazione. Ti rendi conto che i file core devono essere modificati per ottenere l'output desiderato. In quel caso, potresti usare il pre_system
e il post_system
ganci per entrare nel flusso di esecuzione e raccogliere le statistiche secondo necessità.
Se sei a conoscenza del pattern dell'osservatore dell'evento, il concetto è simile in quanto ascolti gli eventi generati dal sistema e il corrispondente codice dell'osservatore viene eseguito quando l'evento osservato viene attivato.
Questa è stata un'introduzione di base al sistema di hook in CodeIgniter. Nella prossima sezione, esamineremo da vicino i vari hook disponibili per l'inserimento nel sistema.
Il sistema di aggancio CodeIgniter fornisce diversi punti di aggancio che è possibile utilizzare durante l'implementazione dei ganci personalizzati. Il punto di aggancio è fondamentalmente un determinato stato nel flusso di lavoro dell'esecuzione della richiesta in un dato momento.
Ad esempio, quando implementi il pre_system
gancio, lo sai che sei all'inizio della fase di bootstrap. D'altra parte, se hai scelto il post_system
hook, puoi essere sicuro che l'esecuzione è stata completata e la risposta è già stata inviata al client.
In questa sezione, esamineremo i diversi punti di aggancio che sono forniti dal sistema di aggancio CodeIgniter.
Il pre_system
e il post_system
i ganci rientrano in questa categoria poiché la prima viene chiamata molto presto durante la fase di bootstrap mentre la seconda viene chiamata dopo che l'esecuzione della pagina è stata completata.
Posso pensare ad alcuni casi d'uso che potrebbero essere ottenuti con gli hook di sistema:
Ci sono tre ganci che rientrano in questa categoria, quindi esaminiamo ciascuno di essi.
Il pre_controller
l'hook viene chiamato appena prima dell'istanza della classe controller. Quindi, se desideri effettuare ulteriori controlli prima che il controller venga chiamato, questo è l'hook che stai cercando.
Come suggerisce il nome, il post_controller_constructor
l'hook viene chiamato immediatamente dopo l'istanza dell'oggetto controller e prima della chiamata al metodo effettivo.
A questo punto, si è certi che il controller verrà istanziato e il metodo verrà chiamato a breve, in modo da poter caricare qualsiasi libreria specifica del controller qui o implementare anche la convalida personalizzata specifica del controller.
Il post_controller
l'hook viene chiamato dopo l'esecuzione del metodo controller. Quindi le cose che vuoi eseguire dopo l'esecuzione del controller dovrebbero essere implementate con questo hook.
Questa è stata la storia dei ganci specifici del controller.
Secondo la documentazione di CodeIgniter, il display_override
gancio sostituisce il nucleo _display
metodo. Il centro _display
il metodo è usato per inviare l'output al client, e quindi usando il display_override
hook puoi modificare il modo in cui l'output viene inviato all'utente.
In effetti, esploreremo questo hook in dettaglio mentre passiamo alla sezione successiva, in cui discuteremo come creare un hook personalizzato.
Il cache_override
gancio sostituisce il nucleo _display_cache
metodo del Produzione
classe. Il _display_cache
il metodo è responsabile della pubblicazione dell'output nella cache, quindi è possibile utilizzare questo hook se si desidera servire l'output della pagina dalla posizione cache diversa nel caso in cui sia stato implementato un diverso meccanismo di memorizzazione nella cache.
Questo conclude la storia di diversi punti di aggancio nel sistema di aggancio CodeIgniter. Nella prossima sezione, vedremo come esattamente si potrebbe trarre un vantaggio dal sistema di aggancio implementando un esempio reale.
Sono sicuro che hai avuto abbastanza teoria finora, quindi torniamo ad uno sviluppo pratico! In questa sezione creeremo un hook personalizzato per dimostrare i concetti discussi finora in questo articolo.
Nel nostro caso, useremo il display_override
gancio che sarà responsabile della sostituzione del token. Per essere più precisi, sostituiremo tutte le occorrenze di [APPUNTAMENTO]
con la data corrente. Certo, sembra un caso d'uso piuttosto semplice, ma potresti facilmente estenderlo per essere più specifico secondo le tue esigenze.
Per impostazione predefinita, il sistema di aggancio è disabilitato nel framework principale, quindi la prima cosa che devi fare è abilitare il sistema di aggancio.
Vai avanti e apri il file di configurazione application / config / config.php
.
Cerca il seguente frammento e accendilo cambiando FALSE
a VERO
.
Ora siamo pronti a definire i nostri ganci. In effetti, CodeIgniter viene già fornito con il file
application / config / hooks.php
che potresti usare se desideri definire ganci.Di default, il
hooks.php
il file è vuoto, quindi aggiungiamo il nostro codice hook personalizzato per renderlo più significativo.'ReplaceToken', 'function' => 'replacePlaceholderCode', 'filename' => 'ReplaceToken.php', 'filepath' => 'hooks');La sintassi della definizione di un hook personalizzato è piuttosto semplice. È il
$ gancio
array che contiene tutti gli hook che devono essere eseguiti.La chiave di ogni voce dell'array è il nome del gancio stesso che stai definendo. Quando definisci un hook, stai dicendo al sistema di eseguire un determinato codice quando succede qualcosa. Questo è esattamente ciò che deve essere fornito come valore di qualsiasi hook. Passiamo rapidamente a ogni chiave.
classe
la chiave contiene il nome di una classe che contiene il codice che deve essere eseguito.funzione
la chiave contiene il nome del metodo che verrà chiamato sull'esecuzione dell'hook.nome del file
punti chiave del file che definisce il codice hook completo.percorso del file
definisce il percorso della directory del file dichiarato sotto nome del file
chiave, ed è relativo al applicazione
directory. Generalmente, è impostato su ganci
, quindi risultante in un applicazione / ganci
struttura. Ovviamente, non c'è nulla che ti impedisca di definire un percorso completamente diverso se desideri farlo.Come nota a margine, se non si desidera creare un file di classe, è anche possibile fornire una funzione di chiusura che verrà eseguita quando viene attivato l'hook.
Nel nostro caso, creeremo un file ReplaceToken.php
e in base alla definizione dell'amo deve essere posizionato sotto applicazione / ganci
elenco.
Vai avanti e crea un file applicazione / ganci / ReplaceToken.php
con i seguenti contenuti.
CI = & get_instance (); // ottiene l'output effettivo $ contents = $ this-> CI-> output-> get_output (); // sostituisci i token $ this-> CI-> load-> helper ('date'); $ contents = str_replace ("[DATETIME]", standard_date (), $ contents); // imposta l'output echo $ content; ritorno;
Lo scopo del nostro gancio è sostituire il [APPUNTAMENTO]
segnaposto con la data effettiva prima che l'output di qualsiasi pagina nella nostra applicazione venga inviato al client.
Come abbiamo discusso in precedenza, l'output della pagina è già compilato al momento del display_override
il gancio è chiamato. Quindi la prima cosa che vorremmo fare è recuperare l'output pronto per essere inviato all'utente.
// carica l'istanza $ this-> CI = & get_instance (); // ottiene l'output effettivo $ contents = $ this-> CI-> output-> get_output ();
Il get_instance
il metodo è usato per istanziare l'istanza dell'applicazione, ed è assegnata a $ This-> CI
. Successivamente, usiamo il get_output
metodo del Produzione
classe per recuperare i contenuti della risposta.
Il resto è piuttosto semplice. Il [APPUNTAMENTO]
il segnaposto deve essere sostituito con la data effettiva. Per rendere le cose più facili, il Data
l'helper è usato per eseguire l'operazione desiderata, e siamo quasi arrivati alla logica del nostro hook.
// sostituisci i token $ this-> CI-> load-> helper ('date'); $ contents = str_replace ("[DATETIME]", standard_date (), $ contents);
Infine, è necessario eseguire il richiamo dell'output come display_override
sovrascrive il _display
metodo che viene utilizzato per inviare l'output al client. Quindi abbiamo bisogno di farlo da soli in questo caso; altrimenti, sarebbe stato gestito dal nucleo _display
metodo.
// imposta l'output echo $ content; ritorno;
In effetti, questo conclude la storia del nostro amo personalizzato!
Ora, procediamo e creiamo una nuova pagina CodeIgniter in modo che possiamo testare il nostro hook personalizzato. Crea un file di controller application / controller / TokenExample.php
con i seguenti contenuti.
load-> view ( 'token_content');
Ed ecco come il file di visualizzazione associato application / views / token_content.php
dovrebbe guardare.
Data odierna: [DATETIME]
E questo è praticamente tutto. Indirizza il tuo browser a http: // your-code-igniter-site-url / TokenExample / index e dovresti vedere l'output previsto!
Quindi questo è il sistema di aggancio a tua disposizione se desideri entrare nel tipico flusso di lavoro dell'applicazione CodeIgniter. Spero che tu abbia apprezzato l'articolo e che ti aiuti nello sviluppo quotidiano di CodeIgniter.
Oggi, abbiamo esaminato uno degli eccitanti hook di funzionalità CodeIgniter. Gli hook consentono di intervenire nel tipico flusso di lavoro di esecuzione delle richieste dell'applicazione CodeIgniter.
All'inizio dell'articolo, abbiamo discusso il concetto di base di Hook in CodeIgniter, e poi abbiamo discusso i diversi hook disponibili nel sistema. Infine, nell'ultima sezione abbiamo esplorato come creare un gancio personalizzato e i suoi meccanismi interni.
Non esitare a esprimere i tuoi pensieri usando il feed qui sotto. Inoltre, se vuoi che venga fuori qualche argomento specifico, per favore fammelo sapere.