loader

Codeigniter: Estendiamo il framework con gli HOOKS

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:

  1. Prima di caricare il sistema: pre_system 
  2. Prima di richiamare i controller: pre_controller 
  3. Dopo aver costruito l’obj controller: post_controller_constructor 
  4. Dopo aver eseguito il controller: post_controller 
  5. Sovrascrittura dell’output: display_override
  6. Sovrascrittura della cache: cache_override 
  7. 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.