Code Igniter è un framework PHP che si struttura "lievemente" sul popolare Design Pattern Model-View-Controller (MVC): i Controller la fanno da padroni essendo i componenti fondamentali del framework, mentre viste (Views) e modelli (Models) ricoprono un ruolo minore, in alcuni casi opzionali. Questa struttura fluida fornisce un'ampia libertà d'azione allo sviluppatore, che si trova meno "legato" rispetto a quanto accade con altri framework PHP che adottano MVC.

Ma non è tutto: Code Igniter ha assunto l'aspetto dell'HMVC (Hierarchical Model View Controller) che garantisce ancora più libertà e controllo: i Controller, i Model e le View possono essere collocati in path costituite da sotto-directory specifiche, per garantire maggiore scalabilità e modularità all'applicazione.

Le caratteristiche principali che mi hanno fatto "innamorare" di Code Igniter, sia a prima vista che nel lungo termine, sono:

Velocità

Code Igniter è uno dei framework PHP più veloci (se non il più veloce) in assoluto tra quelli oggi disponibili in Rete. Provare per credere: con la classe built-in Benchmark è possibile fissare dei "set-point" con cui calcolare la velocità d'esecuzione. I numeri sono impressionanti.

Curva d'apprendimento ridotta

Rispetto alle controparti più popolari usare Code Igniter è davvero molto facile. Tuttavia questa semplicità di utilizzo non è assolutamente sinonimo di scarsa qualità,  mancanza di componenti accessori o struttura portante scricchiolante. Anzi, Code Igniter è strutturato molto solidamente e scritto in maniera professionale, per garantire risultati concreti anche nello sviluppo di applicazioni Web molto complesse.

Agevolazione nella scrittura di codice

Che consente un notevole risparmio di tempo quando si tratta di sedersi al computer e iniziare a programmare. Se hai esperienza con lo sviluppo di applicazioni PHP tramite Zend Framework o Symfony, saprai sicuramente che sarà necessaria una procedura piuttosto colorita di setup, configurazioni interne, scelta dei componenti, installazione e modifiche varie ai moduli Apache. Code Ingniter, nella sua versione più semplice, permette di impostare l'applicazione, settare le configurazioni e creare una pagina di benvenuto perfettamente funzionante nel giro di qualche minuto. Non ho trovato ancora un framework che si setta più velocemente, nonostante ne abbia provati tanti.

Modularità, riusabilità e eleganza

Code Igniter è completamente personalizzabile, fino alla più recondita delle funzionalità. E' possibile impostare le proprie regole per la gestione e la scomposizione degli URL/URI, i propri prefissi e la propria nomenclature per le classi ed i Controller, le proprie modalità di azione all'interno dei file e delle directory. Non solo, il codice che scrivi in Code Igniter è assolutamente modulare e riusabile: puoi creare un tuo modo d'azione, una tua "sottolibreria" da usare in più applicazioni differenti per risparmiare ancora più tempo in fase di produzione ed ottenere risultati ancor più performanti.

Completezza

Nonostante il pacchetto che otteniamo dal download di Code Igniter sia decisamente compatto, specialmente se paragonato ad altri framework, contiene tutte le componenti necessarie per lo sviluppo di un'applicazione Web moderna. Troviamo componenti aggiuntivi ed accessori dedicati a qualsiasi feature che possiamo incontrare nel nostro cammino in back-end.

Se vogliamo trovare un punto dolente, questo potrebbe essere caratterizzato dallo sviluppo di applicazioni e-commerce piuttosto complesse. Se risultano comunque fattibili, nella maggior parte dei casi, in molti altri casi è preferibile utilizzare altri prodotti più specificamente dedicati a questa tipologia di siti. Su questo punto la community si divide: da una parte c'è chi dichiara che creare e-commerce con Code Igniter sia compito assolutamente fattibile, dall'altra troviamo i sostenitori di prodotti (siano essi framework, CMS o software) dedicati allo scopo specifico. La mia opinione è che possono avere ragione entrambe le parti, se scelgono la soluzione migliore per loro.

In conclusione

Code Igniter risulta una scelta vincente e consigliata quando dobbiamo realizzare un'applicazione Web seguendo uno schema MVC modulare, e vogliamo privilegiare la libertà di movimento e la velocità di produzione di codice rispetto alle feature (che assumono sembianze simili ai CMS) derivanti da soluzioni più "complete" ma ingombranti, come Zend Framework o Symfony. La strategia di scelta, quando non è obbligata o imposta da fattori di forza maggiore, dipende dai propri gusti e dal proprio "stile PHP": io sono un Code Igniter-addicted!

5 CommentiDi' la tua

Il tuo indirizzo email non sarà mostrato pubblicamente. I campi obbligatori sono contrassegnati da *

Il fatto che in CI i modelli non siano centrali (non esiste neanche un ORM) è uno dei problemi, perché tutta la logica va a finire nei controller portando inevitabilmente a duplicazioni di codice e classi di centinaia di righe. Non oso immaginare quanto boilerplate ci sia nelle centinaia di progetti a cui hai partecipato... In ogni caso, ripeto che credo sia davvero criminale consigliare CI al giorno d'oggi, considerando che inevitabilmente porterà a strutturare il proprio progetto come si faceva nel 2008 senza tenere alcun conto dell'incredibile quantità di passi in avanti che si sono fatti da allora, e della quantità di tempo che si può risparmiare seguendo delle pratiche moderne. E' anche un ottimo modo per irritare gli sviluppatori che prenderanno in mano il proprio progetto nel futuro (sono uno di questi: purtroppo mi tocca mantenere un paio di siti CI legacy, e ho attacchi di panico ogni volta che mi viene chiesta una modifica). Non è questione di confrontarlo con altri framework (ho nominato Laravel/Symfony solo per proporre delle alternative "sane"), il confronto non dovrebbe neanche esistere. E' come confrontare un computer di oggi con uno di 10 anni fa: che risultato puoi aspettarti?

anonymous coward
anonymous coward

@massimiliano: credo tu non abbia letto bene l'articolo, oppure non abbia usato codeigniter adeguatamente. In questo caso sapresti che il componente più importante del suddetto framework sono i Controller, non i Model, che nelle strutture MVC "normali" sono essenziali alla pari delle altre 2 componenti, mentre in CI, sottoscrivo, sono opzionali e il loro utilizzo è a discrezione dello sviluppatore. Ho partecipato a centinaia di progetti scritti in CI dove i Model erano usati quasi esclusivamente in presenza di operazioni con db. Le versioni di Zend e Symfony che citi, sono appunto versioni minimali. Se mi contesti anche la "snellezza" di CI, è finita. Tuttavia, sentiti libero di preferire altri framework. @anonymouscoward: tralasciando l'hating della parte finale, nell'articolo non viene mai citato Laravel, dunque non so per quale motivo lo includi nella tua recensione. La tua opinione è rispettabile, ma personale: esistono molti sviluppatori, anche molto esperti con cui sono stato e sono a contatto, che usano versioni personalizzate e pompate di CI per gestire progetti anche molto complessi. Laravel e ZC sono OTTIME scelte, dove sta scritto il contrario? Qui si parla di CI, non è un confronto tra framework che stabilisce il migliore. E' in elaborazione una rubrica che tratta di vantaggi/svantaggi dei framework.

Riccardo Degni
Riccardo Degni

Purtroppo temo che l'autore non abbia compreso appieno il concetto di MVC, visto che definisce il Model come "ruolo minore", quando invece sono la parte più importante. Temo poi che non sia molto aggiornato sul mondo dei framework, visto che sia Zend sia Symfony sono nelle ultime versioni supermodulari (e quindi molto più snelli di codeigniter nelle rispettive versioni minimali).

Massimiliano
Massimiliano

CodeIgniter è stato un framework importante, ma *consigliarlo* nel 2018 è semplicemente da irresponsabili. Il fatto che sia compatibile con PHP 5.3 significa che, a livello di codice, è fermo a dieci anni fa, e non fa alcun utilizzo di tutte le funzionalità moderne che rendono PHP non dico piacevole ma sopportabile. L'ultima major version è uscita nel 2016, da allora solo bugfix. Non esiste supporto a Composer, quindi usare pacchetti non specificatamente creati per CodeIgniter è difficile se non impossibile (alla faccia della modularità). Non esiste possibilità di creare middleware, quindi bisogna scrivere un sacco di boilerplate in ogni controller (alla faccia dell'eleganza). Poi l'ossessione per la velocità mi fa ridere, dato che nel 99% dei casi parliamo di pochi ms di differenza, che spesso vengono annullati con l'opcache di PHP, e che non sono certo il collo di bottiglia dell'applicazione come possono essere invece più facilmente le query al DB. Francamente se uno deve proprio sviluppare in PHP fa decisamente meglio a usare Laravel (magari Lumen se proprio ci tiene ai microframework) o Symfony, non certo un framework rimasto pressoché identico da più di 10 anni e che dovrebbe essere relegato ai progetti legacy. Peraltro non sono affatto più difficili da configurare (quando mai si devono modificare dei moduli Apache per installare Laravel?!), ma sospetto che per "configurare" tu intenda "caricare dei file .php su un FTP e andare su miosito.it", nel qual caso forse dovresti studiarti un po' di development moderno ma proprio dalle basi.

anonymous coward
anonymous coward

Assolutamente d'accordo, usiamo CI oramai da diverso tempo in azienda e va benissimo. Anche per compiti complessi, api e siti ecommerce dove con soluzioni "preconfezionate" non ci arrivi.

Fabio
Fabio