Codeigniter: Estendiamo il framework con gli HOOKS

25 Oct 2019 | M.A.D.R.

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.

Codeigniter VS Laravel: chi vince la sfida?

25 Oct 2019 | M.A.D.R.

Oggi l'evoluzione dei linguaggi sono sempre più orientate verso la semplificazione del codice, l’ottimizzazione delle funzionalità e la velocità di esecuzione. Codeigniter il nonno di tutti i framework, riesce ancora a tener testa al gio...

Codeigniter Migration: Versioning Database

25 Oct 2019 | M.A.D.R.

Per “migration” s'intende le gestione delle varie versioni di un database. Grazie al concetto di migration possiamo effettuare tutte le operazioni sul database che abitualmente effetuiamo con strumenti come phpMyAdmin, Toad, MySQL...

Codeigniter CLI: Eseguiamo lavori da linea di comando.

25 Oct 2019 | M.A.D.R.

Come tutti sapranno un framework che si rispetti mette a disposizione la CLI (command line interface), la quale permette di richiamare comandi più o meno complessi. A cosa servono? Per semplicità soffermiamoci solo ad alcuni principali utili...

Codeigniter: Estendiamo il framework con gli HOOKS

25 Oct 2019 | M.A.D.R.

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 pensa...

Codeigniter: Profilazione dell'applicazione

25 Oct 2019 | M.A.D.R.

Seguendo l'articolo del Banchmark, per completare le operazioni di performance del nostro codice, Codeigniter permette la creazione di una profilazione dettagliata dell'esecuzione del nostro codice. La classe Profiler visualizzerà i risultati de...

CodeIgniter: Analizziamo le performance del nostro codice

25 Oct 2019 | M.A.D.R.

Ogni programmatore ad un certo punto dello sviluppo del codice, ha necessità di analizzare le performance della propria applicazione/funzione/metodo, infatti CodeIgniter ha una classe di gestione Benchmark sempre attiva, che consente di calcolare ...

Codeigniter: Template Engine o Template Parser

25 Oct 2019 | M.A.D.R.

Salve a tutti, dopo aver commentato la funzione dei controller e dei model non resta che parlare delle view, o come meglio definiti Template Engine o Template Parser. Codeigniter non ha un vero e proprio Template Engine, ma sfrutta una classe nat...

Codeigniter: Interazione con i database

25 Oct 2019 | M.A.D.R.

Continuiamo questa piccola avventura: CodeIgniter può interagire con i database attraverso un model (ma non è obbligatorio) o attraverso un controller (altamente sconsigliato). Cosa significa interagire con un database? Possiamo recuperare ...

CodeIgniter: Flussi di funzionamento "Router"

25 Oct 2019 | M.A.D.R.

Quello che uno sviluppatore, abituato a interagire con i files php, deve capire la centralità del file index.php, ossia il cuore di un progetto Framework, ed in questo caso Codeigniter router. Non esistono altre pagine all’infuori di index.ph...

Installazione CodeIgniter: prime impressioni

25 Oct 2019 | M.A.D.R.

Abbiamo già citato nell'articolo precedente alcune caratteristiche di questo Framework CodeIgniter. Piccola premessa obbligata... Oggi passeremo al setaccio la procedura d'installazione dello stesso e cercheremo di orientarci nella struttura ...

CodeIgniter - Un framework di tutto rispetto

25 Oct 2019 | M.A.D.R.

Arriva un momento, nel percorso lavorativo di un programmatore Php, nel quale si avverte la mancanza di un framework che possa semplificare la gestione di flussi più o meno complessi. I così detti framework contengono metodi e funzioni in rispo...

Soluzioni complete per ogni esigenza