Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

CodeIgniter: il framework semplice ed elegante

CodeIgniter è il framework Php che fa della semplicità e dell'eleganza nella programmazione la sua caratteristica principale
CodeIgniter è il framework Php che fa della semplicità e dell'eleganza nella programmazione la sua caratteristica principale
Link copiato negli appunti

Questo articolo fa parte di una serie dedicata alla comparazione di Framework PHP.

CodeIgniter, da qui in poi CI, si presenta come il framework che non richiede configurazione e che consente di scrivere applicazioni web ad elevate performance, il tutto avvalendosi della chiara documentazione che offre. Il framework richiede la versione Php 5.1.6 o superiore e consente di manipolare i dati della maggior parte dei database noti.

Installazione

Una volta scaricato l'archivio basta estrarlo e posizionarlo sul nostro server. Potrebbe essere necessario modificare il parametro base_url. Tutti i file di configurazione si trovano sotto la cartella application/config. Per lavorare con i database è necessario modificare il file di configurazione database.php. In pochi semplici passaggi la nostra prima applicazione è già disponibile. Molto positivo come aspetto.

Pattern MVC

CI implementa il pattern MVC nel modo classico. All'interno della cartella application sono infatti disponibile le tre cartelle utile allo scopo (models, views, controllers). Il controller in CI estende una classe base chiamata CI_controller. Per richiamare il controller desiderato nelle nostre applicazioni è sufficiente aggiungere il nome del controller, e quindi della sua action, all'url di base del nostro sito, sperandoli con il carattere dello slash "/". Nel caso avremmo quindi www.miosito.it/index.php/miocontroller/action.

Utilizzando i file di configurazione è possibile indicare all'applicazione quale deve essere il controller di default. Le azioni del controller non sono altro che i suoi metodi senza l'aggiunta di suffissi o prefissi. Per passare i parametri ai metodi è sufficiente accodarli, nel preciso ordine in cui sono dichiarati, alla query string, separandoli sempre con il carattere di slash. CI offre un metodo magico chiamato _remap che consente di analizzare l'action fornita nella uri e di conseguenza scegliere un'azione diversa da quella fornita. Molto comoda è la possibilità di organizzare i controller all'interno di sottocartelle.

Anche il model non presenta grandi sorprese. Un model lo si ottiene estendendo la classe model di base. Questo permette di effettuare le operazioni sul database di cui parlo in seguito. Il model viene istanziato all'interno del controller mediante la sintassi

$this->load->model('name');

dove chiaramente name è il nome del model che può includere anche il path ad una sottocartella del model. Infatti CI consente, come nel caso dei controller, di implementare i model in sottocartelle.

L'ultima parte del MVC è rappresentato dalle viste. In CI, una vista rappresenta un file html o php. Le viste vengono richiamate dal controller mediante la seguente sintassi:

$this->load->view('name');

Anche per le viste è presente la possibilità di creare una struttura ad albero all'interno del folder views e di utilizzare, nel nome, il path per raggiungere la vista desiderata. Il metodo precedente accetta altri due parametri. Il secondo parametro è un array passato alla vista che ci consente di renderizzare dati variabili mentre il terzo è un booleano che indica che la vista deve essere restituita come codice o stampata. Un esempio è il seguente:

$data = array(
               'title' => 'My Title',
               'heading' => 'My Heading',
               'message' => 'My Message'
          );

$this->load->view('name', $data);

Database

La prima cosa che mi è saltata all'occhio è che per lavorare con un database ho la necessità di svolgere una delle seguenti operazioni:

  • Indicare nei file di configurazione di pre-caricare il database.
  • Caricare manualmente il database con il relativo metodo.

Nessuna delle due funzioni è ovviamente complessa ma, per come la vedo, si usa un framework per realizzare applicazioni web di una certa complessità che, nel 99 per cento dei casi, richiedono l'utilizzo di un database. Si tratta di una piccolezza ma, a volte sono i dettagli che fanno la differenza.

CI mette a disposizione i classici metodi per le operazioni sul database. Nella guida viene evidenziato come nell'oggetto database siano implementati metodi per l'escaping delle stringhe. Interessante anche la possibilità di impostare il prefisso per le tabelle. A differenza degli altri framework, il model non funziona da active record. Infatti la classe base non dispone di alcun metodo per interagire con il database. Gli sviluppatori evidenziano questa caratteristica come un punto positivo: non è necessario, dicono, creare tante classi per quante sono le tabelle del database. È vero che in un'applicazione con database complessi la cosa potrebbe essere complicata ma è anche vero che ci sono alcuni framework, come Yii, che hanno apposite utility che consentono di realizzare i model con pochi click.

Validazione

Anche CodeIgniter implementa la validazione dei dati direttamente sul form . Come è facile immaginare una situazione del genere non consente di effettuare la validazione dei dati qualora questi siano passati attraverso la uri.

Ajax

Per quanto riguarda JavaScript e Ajax in particolare, in CI è presente una classe che consente di creare, richiamando gli opportuni metodi, le funzioni più comuni per quanto riguarda js. Si passa dal caricamento delle librerie agli effetti visivi. Nel momento in cui scrivo nella guida non è presente nessun riferimento a qualche metodo ch emi consenta di effettuare chiamate Ajax in modo veloce.

Caching

Anche in questo caso quello che offre la versione base del framework non mi convince. Leggendo la guida si scopre che per mettere in cache un render di una vista è sufficiente inserire la seguente riga di codice all'interno di ogni singola azione del controller:

$this->output->cache(n);

dove n rappresenta il numero di minuti della durata della cache. È disponibile anche la caching per il database per il quale è ovviamente necessario apportare le modifiche al file di configurazione.

Autenticazione

Anche sotto questo punto di vista noto delle mancanze rispetto ad altri framework. La cosa che maggiormente mi rende perplesso sull'argomento è la totale assenza, nella home, di un "qualcosa" che indichi come effettuare l'autenticazione con CI. Da una ricerca semplice su Google si scopre che ci sono decine di librerie che consentono l'autenticazione. Per molti la cosa potrebbe non essere un problema per me, che analizzo le differenze con gli altri framework, lo è. Molti potrebbero obiettare che lo scopo di un framework esula dal fornire un sistema di autenticazione. Posso anche essere d'accordo ma quindi, quelli che lo forniscono hanno un di più rispetto a CI.

Internazionalizzazione e localizzazione

La funzionalità è implementata in CI anche se in modo abbastanza complesso. Situazione che potrebbe scoraggiare chi sceglie di utilizzare un framework per risolvere certe problematiche e non ha grandi esperienze di programmazione. Il tutto consiste, dopo le opportune configurazioni, nell'estendere il controller partendo non più da quello base ma da quello i18n definito secondo il wiki. Le viste, per consentire l'internazionalizzazione, verrebbero quindi caricate anziché col metodo $this->load->view, col metodo $this->load_view. Questo genere di internazionalizzazione prevede l'utilizzo di viste diverse in funzione della lingua.

Supporto e guide

La guida non è in italiano e nella pagina principale contiene un menu JavaScript che rende infelice la navigazione. Per quanto riguarda i forum sono ovviamente solo in lingua inglese ma sono molto popolati e rappresentano un 'ottima risorsa di aiuto.

Ulteriori caratteristiche

Gli sviluppatori offrono come "ulteriore funzionalità" la possibilità di precaricare i model all'inizializzazione dell'applicazione. Ci sono inoltre, una serie di librerie che gli autori definiscono come helper. Si passa dagli helper per l'HTML a quelli in Php come ad esempio la gestione dei file.

Guida ai Framework PHP

  • Articolo 1: dooPHP
  • Articolo 2: YII
  • Articolo 3: Symfony
  • Articolo 4: Code Igniter
  • Articolo 5: Zend(in via di pubblicazione)
  • Articolo 6: Kohana (in via di pubblicazione)
  • Articolo 7: Akelos (in via di pubblicazione)
  • Articolo 8: CakePhp (in via di pubblicazione)

Indice di tutti gli articoli.

Ti consigliamo anche