Getting Started e Bootstrap
Attenzione, questo post è relativo alla Preview Release 0.7, quindi pesantemente OUTDATED
Zend-framework basa la sua attività sul concetto MVC (Models-Views-Controllers), separando ogni attività dalle altre e rendendo l’organizzazione stessa dell’applicativo, molto più ordinata.
La prima cosa da ricordare è che ZF fa uso di url rewriting (mod_rewrite) e di php5, questo ci costringe (quelli che non usano linux…) ad usare l’accoppiata LAMP (Linux Apache Mysql Php), anche se la prima e terza sono effettivamente non vincolanti.
Ogni richiesta (url) viene divisa da ZF in un accoppiata Controller-Azione. Un url del tipo http://www.ashetic.net/clienti/add verrebbe di fatto a richiamare la classe ClientiController ed, all’interno di essa, la funzione addAction, ovviamente ipotizzando che il nostro applicativo sia installato nella webroot.
Per poter lavorare in questo modo, dobbiamo innanzitutto abilitare mod_rewrite (abilitato di default) e scrivere la regola principale (che ho preso dal manuale di ZF). Questa regola va piazzata nella root di installazione dell’applicativo, in un file .htaccess. (N.B.: per poter utilizzare queste direttive in .htaccess, dovete assicurarvi che la directory dove piazziamo il file abbia come direttiva in httpd.conf o altri file di configurazione del server, la direttiva AllowOverride All.
Contenuto del mio file .htaccess:
RewriteEngine on RewriteRule !.(js|ico|gif|jpg|png|css)$ index.php
Questo mi porta a poter parlare della pagina index.php, che viene chiamata Bootstrap Page, in quanto si occupa di caricare le classi indispensabili e di instanziare quelle necessarie.
La pagina di bootstrap si occupa, appunto di includere la prima classe (Zend.php) e di caricare ed instanziare il nostro controller ed altre cose che vedremo in seguito.
Il suo contenuto è simile a quanto segue:
/* * Created on Jan 23, 2007 * * Luca Gervasi * */ error_reporting(E_ALL|E_STRICT); date_default_timezone_set('Europe/Rome'); set_include_path('.' . PATH_SEPARATOR . './library'. PATH_SEPARATOR . './application/models'. PATH_SEPARATOR . get_include_path()); include "Zend.php"; //require_once 'Zend/Config/Xml.php'; Zend::loadClass('Zend_Controller_Front'); Zend::loadClass('Zend_View'); Zend::loadClass('Zend_Config_Xml'); //setup $baseurl = substr($_SERVER['PHP_SELF'], 0, strpos($_SERVER['PHP_SELF'],'/index.php')); $view = new Zend_View(); $view->setScriptPath('./application/views'); Zend::register('view',$view); $fc = Zend_Controller_Front::getInstance(); $fc->setBaseUrl($baseurl); $fc->setControllerDirectory('./application/controllers'); $fc->throwExceptions(true); //run $fc->dispatch();
Qui possiamo notare alcune informazioni: innanzitutto non è un errore quello di non chiudere il tag
Possiamo notare l’utilizzo (richiesto da alcune classi) della funzione date_default_timezone_set(), che si occupa di impostare quello che ben immaginate.
Con set_include_path, aggiungiamo al path di ricerca la nostra dir library (che contiene Zend.php e le relative classi) ed inoltre la dir models.
Le righe seguenti servono per caricare le classi che ci servono (Zend_Controller_Front, Zend_View e Zend_Config_Xml), che vengono istanziate successivamente.
Zend_View
Zend_View possiamo vederla come una classe indispensabile per il templateing, l’oggetto $view viene istanziato e viene descritta la directory contenente le nostre “viste” (diciamo i templates di presentazione pagina) e successivamente viene utilizzata la Zend::registry per “memorizzare” staticamente l’oggetto creato e permetterci di mantenerlo persistente lungo tutte le pagine della nostra applicazione.
Zend_Controller_Front
Questa classe è il nostro router di url, non c’è molto da dire per quello che abbiamo scritto qui, come immaginiamo, viene istanziato con l’url base della nostra applicazione (calcolato dinamicamente) e viene aggiunta in seguito la directory che contiene i nostri controllers.
Zend_Config_Xml
Questa classe non la istanzio ancora (anche se dovrei) per non mettere troppa carne sul fuoco. Vi dirò semplicemente che grazie a questa classe, potremmo leggere le nostre impostazioni di configurazione direttamente da un file xml.



