back to top

CodeIgniter Hooks

Gli Hooks sono delle particolari componenti del framework CodeIgniter che permettono di apportare delle modifiche sul funzionamento della piattaforma senza per questo motivo dover andare ad incidere sul suo core, evitando in questo modo di generare instabilità e malfunzionamenti. Si può per esempio avere la necessità che un determinato script venga caricato precedentemente o successivamente ad uno specifico Controller, un Hook permetterà di far questo in fase di esecuzione senza dover agire sul codice del framework.

La possibilità di abilitare o di disabilitare gli Hooks è data da un parametro modificabile presente all’interno del codice del file sul percorso:

system/application/config/config.php
Il parametro in questione è $config[‘enable_hooks’], esso può essere impostato tramite l’associazione dei valori booleani TRUE (abilita gli Hooks) e FALSE (disabilità questa funzionalità). In CodeIgniter gli Hooks sono definiti all’interno di uno specifico file che si trova sul percorso:
system/application/config/hooks.php
Per la definizione di un Hook è necessaria una particolare sintassi che prevede la creazione di un array strutturato sul modello dell’esempio seguente:
// Definizione di un Hook
$hook['pre_controller'] = array(
                                // nome della classe
                                'class'    => 'Classe',
                                // nome della funzione di classe
                                'function' => 'Funzione',
                                // nome del file di classe
                                'filename' => 'Classe.php',
                                // cartella del file di classe
                                'filepath' => 'hooks',
                                // parametri da elaborare
                                'params'   => array('a', 'b', 'c')
                               );
Si analizzino in modo approfondito le diverse componenti del prototipo di Hooks appena presentato:
  • class: corrisponde al nome della classe che si desidera richiamare, è possibile anche utilizzare una funzione procedurale al posto di una classe, in questo caso non dovrà essere specificato alcun valore per l’elemento "class";
  • function: la funzione che verrà invocata tramite l’Hook;
  • filename: è il nome del file che contiene la classe;
  • filepath: è il percorso al file che contiene la classe;
  • params: i parametri che dovranno essere elaborati dallo script.
Per quanto riguarda l’elemento filepath, è necessario sottolineare che la cartella che contiene lo script deve essere salvata all’interno della cartella della propria applicazione; se per esempio il proprio script è stato salvato nella cartella:
system/application/hooks
il valore da associare all’elemento filepath dovrà essere semplicemente hooks, se invece lo script si trova sul percorso:
system/application/hooks/scripts
il valore da associare all’elemento filepath dovrà essere "hooks/scripts".

Gli array che contengono gli elementi degli Hooks sono detti Hook points, l’array $hook[‘pre_controller’] è appunto un Hook point; quelli disponibili nativamente tramite il framework sono i seguenti:

  • pre_system: viene chiamato immediatamente dopo la fase di esecuzione, permette unicamente il caricamento delle classi per il benchmark e quelle relatice agli Hooks stessi;
  • pre_controller: viene chiamato precedentemente a qualsiasi Controller, permette il caricamento di classi base come quelle per il routing e la sicurezza;
  • post_controller_constructor: viene chiamato subito dopo l’istanza di un Controller ma prima di qualsiasi metodo di classe;
  • post_controller: viene chiamato subito dopo l’esecuzione completa di un Controller;
  • display_override: presiede all’override (riscrittura di un metodo ereditato) della funzione _display(), utilizzata per inviare gli output al Web browser alla fine di un’esecuzione;
  • cache_override: consente di utilizzare una propria funzione al posto della funzione di default _display_cache() in modo da creare un sistema di cache personalizzato;
  • scaffolding_override: consente il triggering (commutazione) delle richieste di scaffolding (l’argomento non sarà approfondito in quanto deprecato a partire dalla versione 1.6.0 di CodeIgniter);
  • post_system: viene chiamato dopo l’invio dell’output al browser al termine di tutte le esecuzioni.
E’ possibile effettuare più chiamate ad uno stesso Hook attraverso la semplice creazione di un array multidimensionale:
// Chiamate multiple ad uno stesso Hook

// prima chiamata
$hook['pre_controller'][] = array(
                                  'class' => 'Classe',
                                  ....
                                 );
// seconda chiamata
$hook['pre_controller'][] = array(
                                  'class' => 'SecondaClasse',
                                  ....
                                 );
Si noti che l’ordine delle chiamate determinerà anche l’ordine di esecuzione.

Pubblicitร 
Claudio Garau
Claudio Garau
Web developer, programmatore, Database Administrator, Linux Admin, docente e copywriter specializzato in contenuti sulle tecnologie orientate a Web, mobile, Cybersecurity e Digital Marketing per sviluppatori, PA e imprese.
Articolo precedente
Articolo successivo