Spesso i dev hanno necessità di modificare il comportamento ed il flusso dell’applicazione, codeigniter mette a disposizione gli HOOKS.
Lavorare con un framework, anche se molto semplice, spesso induce ad errori comuni e poco sicuri, basti pensare alla modifica di un file del core dello stesso.
Facendo un breve riepilogo di ciò che si è abituati a fare la situazione risulterebbe disastrosa in termini di file:
- Home.php
- Chisono.php
- salvaHome.php
- salvaChiSono.php
L’esempio sopra, porta con se alcuni limiti di programmazione, ossia associamo le azioni a dei file senza curarci dell’effettiva performance della nostra applicazione.
Ora immaginiamo di voler completare dei dati della home prima di inserirli, banalmente si creerà un nuovo file functions.php e si richiamerà la funzione adibita al completamento dei dati, un piccolo esempio:
function completa_dati(&$data){
//do stuff
}
Nel nostro file salvaHome.php andremo a scrivere una cosa di questo genere:
if(isset($_POST)){
$data=$_POST;
completa_dati($data)
//do stuff
}
Ineccepibile funzionamento, che si andrà a modificare manualmente, ma pensateci, utilizzare un framework non significa fare questa schifezza, bensì utilizzare una struttura compatta e documentata per eseguire porzioni di codice.
Diciamo quindi che dobbiamo allontanarci da questo stile di programmazione e iniziare ad evolvere le nostre conoscenze.
HOOKS
Codeigniter permette di modificare il flusso di funzionamento dell’applicazione agendo in determinate posizioni.
In alcuni casi, è possibile che si desideri eseguire alcune azioni in una determinata fase del processo di esecuzione. Ad esempio, potresti voler eseguire uno script subito prima che i controller vengano caricati o subito dopo, oppure potresti voler attivare uno dei tuoi script in un’altra posizione.
Gli Hooks quindi sono veri e propri modificatori di comportamento della nostra applicazione, sono dei veri e propri Middelware!!!!
Per abilitare questa funzione basterà andare in APPPATH.’config/config.php’ e settare a TRUE questa variabile:
$config['enable_hooks'] = TRUE;
Altrettanto semplice è la creazione e gestione degli Hooks, possiamo dividerli in 7 categorie:
- Prima di caricare il sistema: pre_system
- Prima di richiamare i controller: pre_controller
- Dopo aver costruito l’obj controller: post_controller_constructor
- Dopo aver eseguito il controller: post_controller
- Sovrascrittura dell’output: display_override
- Sovrascrittura della cache: cache_override
- Dopo aver completato l’esecuzione del sistema: post_system
Definiamo un nuovo HOOKS
La prima operazione da fare è quella di creare un nuovo file nella directory config della nostra applicazione, quindi in posizione APPPATH.’config/hooks.php’
Definizione della config:
$hook['tipologia_categoria']=
[
'class'=>'Nome_classe',
'function'=>'metodo_da_eseguire_della_classe',
'filename'=>'Nome_file_classe',
'filepath'=>'dove_abbiamo_posizionato_il_file',
'params'=>array('parametri','metodo') //può essere anche array vuoto
];
Nelle più semplici applicazioni potremmo ridurre l’utilizzo degli hooks alla sola gestione degli header e del footer, così da preoccuparci solo del contenuto “content” della nostra applicazione.
Anche se è possibile utilizzare gli hooks per la gestione minima del layout, è consigliato evitare di manipolare l’output html da hooks, in quanto risulterebbe complicato e soprattutto molto esoso di risorse.
Un hooks molto utile potrebbe essere quello che permette la profilazione della nostra applicazione che abbiamo visto nell’articolo precedente.