Zend Framework Tutorial - 2

Il file di bootstrap

Finalmente possiamo iniziare ad analizzare il codice vero e proprio della nostra applicazione. Partiamo dal file index.php, il file di bootstrap al quale arrivano tutte le richieste dell'utente. Questo file ha un compito molto importante: attivare il Front Controller, il sistema di smistamento delle richieste verso gli appositi Controller e relative Action. Poiché il file di bootstrap viene richiamato sempre e per primo, lo utilizzeremo anche per mettere le istruzioni comuni a tutta l'applicazione. Nell'esempio infatti attiveremo una connessione al database utilizzata (indirettamente) da quasi tutte le Action del nostro sito.

Ecco il codice:

<?php
// includo la cartella del framework e quella dei models
set_include_path(get_include_path().PATH_SEPARATOR.'C:\Programmi\ZendFramework\library'.PATH_SEPARATOR.'.\models');

require_once('Zend/Loader.php');

Zend_Loader::registerAutoload();

date_default_timezone_set('Europe/Rome');

try {
    $db = Zend_Db::factory('Pdo_Mysql', array(
    'host'     => 'localhost',
    'username' => 'root',
    'password' => 'secret',
    'dbname'   => 'ZF-tutorial'
    ));

    $db->getConnection();
} catch (Zend_Db_Adapter_Exception $e) {
    die("Zend_Db_Adapter_Exception: ".$e->getMessage());
} catch (Zend_Exception $e) {
    die("Zend_Exception".$e->getMessage());
}

Zend_Registry::set('db', $db);

define('BASE_URL', str_replace('index.php','',$_SERVER['PHP_SELF']));
Zend_Controller_Front::run('controllers');
?>

Analizziamo ciascuna riga del file:

  • Con set_include_path() rendiamo accessibile alla nostra applicazione sia le classi dello Zend Framework, sia le classi contenute nella cartella models della nostra applicazione. Difficilmente infatti possiamo metter mano al php.ini e modificare l'include_path.
  • Con require_once ci preoccupiamo di caricare la classe Zend_Loader, un comodo componente del Framework che si occupa di effettuare automaticamente le inclusioni dei file contenenti le classi che richiameremo nel resto dell'applicazione. Da questo momento in poi non abbiamo più bisogno di utilizzare le istruzioni include o require!
  • Con Zend_Loader::registerAutoload abilitiamo la suddetta funzionalità (nessuna magia, si basa sulla funzione __autoload di PHP).
  • Con date_default_timezone_set() impostiamo il valore di default del timezone che verrà utilizzato implicitamente da tutte le funzioni sulle date impiegate nel codice.
  • All'interno di un blocco try-catch effettuiamo la creazione di un oggetto Zend_Db_Adapter, responsabile della comunicazione con un DB. Tale operazione avviene grazie al metodo statico Zend_Db::factory al quale passiamo i parametri di connessione (modificateli per adattarli al vostro sistema). Notate come viene specificato anche il tipo di Adapter che vogliamo usare per collegarsi al database, nel nostro caso 'Pdo_Mysql'. Zend_Db::factory ci restituirà quindi un oggetto di tipo Zend_Db_Adapter_Pdo_Mysql che al suo interno usa l'estensione PDO per collegarsi ad un database MySQL.
  • $db->getConnection() effettua la vera connessione al database.
  • Se qualcosa va storto Zend_Db solleverà un'eccezione, gestita dalle righe sottostanti. Un'eccezione del tipo Zend_Db_Adapter_Exception viene sollevata se la connessione al database non ha successo (username o password errati, database irraggiungibile o spento, ecc.). Altre eccezioni possono essere sollevate, ad esempio se il framework non riesce a caricare l'Adapter richiesto. Ecco il perché abbiamo posto un secondo blocco catch che intercetta la generica Zend_Exception.
  • Per rendere l'oggetto Zend_Db_Adapter accessibile al resto dell'applicazione, evitando di usare l'accesso alle variabili globali, utilizziamo il componente Zend_Registry che si comporta come un "cassetto" nel quale conservare oggetti (Zend_Registry::set) e recuperarli all'occorrenza (Zend_Registry::get).
  • Definiamo la costante BASE_URL per memorizzare l'URL di origine della nostra applicazione web, che impiegheremo della costruzione dei template.
  • Infine attiviamo il Front Controller, specificando il nome della cartella contenente i Controller della nostra applicazione. A questo punto il framework istanzia il Controller adeguato ed esegue una sua Action che si occuperà di creare la pagina relativa all'URL richiesto dall'utente.

Nel file di bootstrap abbiamo quindi incontrato i seguenti componenti del framework:

  • Zend_Loader: responsabile del caricamento automatico "al volo" dei file contenenti le classi utilizzate nell'applicazione.
  • Zend_Db: costruisce gli oggetti Zend_Db_Adapter che ci permettono di accedere ai database
  • Zend_Db_Adapter_Exception e Zend_Exception: sono 2 oggetti eccezione, il primo generato da un Zend_Db_Adapter mentre il secondo è la generica eccezione generabile dal Framework.
  • Zend_Registry: contenitore in grado di conservare e restituire oggetti, in modo da facilitare l'accesso degli stessi da qualsiasi parte dell'applicazione, senza che si faccia diretto accesso alle variabili globali
  • Zend_Controller_Front: il Front Controller descritto nel precedente articolo. Si occupa, insieme ad altri componenti del Framework che lavorano dietro le quinte, di leggere l'URL richiesto dall'utente ed identificare Controller e Action che soddisferanno tale richiesta.
Pagine: precedente 1 2 3
Effettua l'accesso o registrati per inserire un commento