Come funziona il sistema di aggancio di CodeIgniter

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.

Hook: un sistema per sovrascrivere il framework principale

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.

Vai attraverso i vari ganci

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.

Hook di sistema

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:

  • segno di riferimento
  • Registrazione
  • Reindirizzamento basato su regole
  • E altro ancora

Ganci controller

Ci sono tre ganci che rientrano in questa categoria, quindi esaminiamo ciascuno di essi.

Pre Controller Hook

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.

Post Controller Constructor Hook

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.

Post Controller Hook

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.

Sostituisce i ganci

Visualizza gancio di sostituzione

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.

Cache Override Hook

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.

Come creare un hook personalizzato

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.

  • Il classe la chiave contiene il nome di una classe che contiene il codice che deve essere eseguito.
  • Il funzione la chiave contiene il nome del metodo che verrà chiamato sull'esecuzione dell'hook.
  • Il nome del file punti chiave del file che definisce il codice hook completo.
  • Il 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.

Conclusione

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.