Con questo articolo iniziamo ad esaminare uno dei framework per PHP che ha raccolto in questi ultimi mesi il favore di molti sviluppatori: CakePHP. Dopo aver trattato alcuni interessanti punti del framework MVC ufficiale sviluppato dalla Zend (lo Zend Framework), vediamo oggi come la comunità open source cerca di stare al passo con i tempi e l'evoluzione dello sviluppo basato sul Web analizzando le funzionalità di questo nuovo e interessante strumento.
CakePHP è uno dei tanti framework nati dall'interessa della comunità di sviluppatori open source verso Ruby On Rails e della successiva necessità di estendere simili strumenti di sviluppo anche ad altri linguaggi. Il progetto nasce nel 2005 come semplice framework per lo sviluppo rapido di applicazioni. Inizialmente utilizzato da Michal Tatarynowicz, il suo sviluppatore principale, per i lavori quotidiani, il progetto ha riscosso un notevole successo ed è stato successivamente rilasciato sotto licenza MIT e ha assunto il nome di CakePHP.
Come molti altri suoi simili il framework si basa fortemente sul modello MVC (Model View Control) e segue pienamente i canoni del web 2.0: un'attiva comunità, una licenza molto flessibile che si adatta a gran parte degli ambiti di lavoro, strumenti per lo sviluppo rapido ed una serie di utilità per integrare facilmente Ajax nelle proprie applicazioni.
Oltre a queste funzionalità il framework è stato corredato da un sistema di template molto flessibile, strumenti per la serializzazione dei dati ed il caching dei risultati delle richieste e soprattutto è compatibile sia con PHP 4 sia con PHP 5.
In questo articolo introdurremo brevemente al framework e vedremo il processo di installazione, mentre nei prossimi ci addentreremo in operazioni specifiche più interessanti per mostrare le potenzialità del sistema.
Installazione del framework
Prima di iniziare a sviluppare con CakePHP è necessario installarlo su proprio sistema. I file possono essere scaricati liberamente dal sito di CakePHP attraverso CakeForge, un'applicazione simile a SourceForge che offre però solamente progetti inerenti a CakePHP. Una volta scaricato il file compresso contenente i sorgenti, è necessario controllare che il proprio sistema abbia i requisiti necessari per far funzionare CakePHP:
- Web Server: è necessario un Web server (come Apache o Lighttpd) con abilitato il supporto per le sessioni ed opzionalmente strumenti per la riscrittura degli URL (mod_rewrite per esempio);
- PHP 4.3.2 o superiore, anche se il consiglio è quello di cercare di preparare subito la macchina con il supporto all'ultima versione di PHP 5;
- Un database supportato come MySQL, PostgreSQL, ADODB, SQLite e PEAR.
Una volta accertati che i requisiti richiesti siano pienamente soddisfatti, è possibile procedere con l'installazione; esistono due differenti configurazioni per l'installazione, una consigliata per lo sviluppo e l'altra per gli ambienti di produzione. Prima di continuare però è necessario dare uno sguardo a come è strutturato il filesystem di CakePHP in modo da poter comprendere meglio eventuali configurazioni avanzate necessarie. Lo faremo nella prossima pagina.
La struttura del filesystem di CakePHP, una volta decompressi i sorgenti, è la seguente:
/app /config /controllers /components /models /plugins /tmp /vendors /views /elements /errors /helpers /layouts /pages /webroot /css /files /img /js /index.php /cake /docs /vendors /index.php
La struttura del filesystem è ben gerarchizzata:
/app/config
contiene dei file PHP che servono per configurare il comportamento di CakePHP e di alcuni suoi componenti;/app/controllers
contiene i controller che verranno eseguiti dal framework in base alle richieste HTTP pervenute;/app/models
contiene le classi PHP che rappresentano i dati utilizzati dall'applicazione;/app/views
contiene, distribuite in diverse directory in base alla loro utilità ed al loro utilizzo, i template e le viste utilizzate dall'applicazione;/app/vendors
contiene le librerie di terze parti utilizzate dall'applicazione che si sta sviluppando;/cake
contiene il core del framework;/app/index.php
permette di utilizzare/app
come DocumentRoot;
Tornando quindi al processo di installazione, nel caso vi troviate nella prima situazione è possibile decomprimere i sorgenti all'interno della cartella di root specificata nella configurazione del Web server.
Nel caso in cui invece si debba operare in un ambiente di produzione è consigliato installare CakePHP in una directory indipendente e configurare il Web server in modo che la cartella di root corrisponda a /path/di/cakephp/app/webroot
.
Qualunque sia l'opzione selezionata è comunque possibile distribuire le directory di CakePHP all'interno del filesystem in base alle proprie esigenze; potrebbe essere per esempio necessario mettere la libreria core
in una cartella condivisa per ogni host installato, oppure posizionare in modo indipendente la cartella contenente i controller o quella contenente i file statici accessibili via Web.
Per poter effettuare opportunamente queste modifiche è necessario modificare manualmente il file index.php
presente all'interno della directory /app/webroot
:
<?php
// ...
/** La directory di root contenente i controller,
* i file di configurazione, le viste ...
*/
if(!defined('ROOT'))
define('ROOT', '/path/alla/direcotry/di/root');
/** La directory webroot, che deve essere comunque specificata
* come Document Root all'interno del file di configurazione
* del Web server.
*/
if(!defined('APP_DIR'))
define('APP_DIR', '/var/www/mywebroot');
/** La directory che contiene il core della libreria
* di Cake.
*/
if(!defined('CAKE_CORE_INCLUDE_PATH'))
define('CAKE_CORE_INCLUDE_PATH', '/usr/lib/cake');
// ...
?>
La configurazione iniziale
Prima di iniziare a testare il framework è necessario configurare a dovere il Web server, l'accesso ai database e le opzioni globali.
Web server
Per quanto riguarda la configurazione del Web server è possibile abilitare mod_rewrite
ed utilizzare il file .htaccess
fornito all'interno dell'installazione standard per poter utilizzare URL puliti e chiari da leggere che non facciano uso di query string. Il file .htaccess
fornito dovrebbe andar bene per tutte le esigenze, a patto che la cartella che si è deciso impostare come DocumentRoot abbia abilitata la possibilità di sovrascrivere le regole di configurazione.
Database
Successivamente è necessario configurare l'accesso al database. Per fare questo bisogna modificare il file app/config/database.php.default
e rinominarlo in database.php
, modificando i valori dell'array $default
definito all'interno del file in modo che corrispondano alle proprie esigenze.
Un accorgimento da tenere in considerazione è il fatto che le tabelle definite all'interno del database utilizzato devono seguire alcune regole affinchè CakePHP le gestisca in modo corretto:
- I nomi devono essere in plurale inglese (
articles
ad esempio), in modo che i modelli corrispondenti abbiano nomi in singolare; - tutte le tabelle devono avere una chiave primaria chiamata
id
; - le chiavi esterne utilizzate per costruire le relazioni tra le tabelle devono essere nomiate utilizzando il singolare della tabella a cui fanno riferimento seguito da
_id
(article_id
per esempio); - è possibile includere i campi
created
emodified
che verranno automaticamente aggiornati da CakePHP quando si opererà sui record.
Opzioni globali
Infine, presi questi accorgimenti, è possibile modificare le opzioni di configurazione globale di CakePHP reperibili all'interno di app/config/core.php
; ogni singola opzione è anticipata da un commento descrittivo esplicativo che ne spiega l'utilità:
- DEBUG: questa direttiva impostata ad un valore superiore a 0 indica al framework che non ci si trova in ambiente di produzione; in questo caso verranno stampati tutti i messaggi di errore generati e l'output delle funzioni
pr
edebug
. Nel caso in cui il valore sia superiore a 2 verranno anche stampati gli statement SQL in fondo alla pagina. - CAKE_SESSION_COOKIE: il nome del cookie da utilizzare per registrare l'id di sessione;
- CAKE_SECURITY: controlla il livello di sicurezza dell'applicazione e può assumere i valori high (la sessione scade dopo 10 minuti e gli ID sono generati nuovamente ad ogni richiesta), medium ( la sessione dura 20 minuti) e low (la sessione dura 30 minuti);
- CAKE_SESSION_SAVE: specifica il modo con cui verranno salvate le sessioni e può assumere i valori cake (i dati sono salvati all'interno di
app/tmp
), php (i dati sono salvati come configurato nel filephp.ini
) e database (i dati sono salvati nel database in base alle opzioni di configurazione di default);
Conclusioni
Abbiamo concluso il primo articolo su CakePHP introducendo brevemente il framework e spiegando come procedere con l'installazione. Nei prossimi articoli vedremo come preparare le basi per una nuova applicazione studiando come si implementano i modelli, le viste ed i controller, e successivamente vedremo qualche esempio di implementazione pratica.