Davide Gullo, Developer

25.05.2013
06:27 (+00:00)
21a settimana
144o giorno

  "E il mare il web concederà ad ogni uomo nuove speranze, come il sonno i sogni..." Cristoforo Colombo

Zend_Application, bootstrap semplice e flessibile

mercoledì, 26 agosto 2009

Zend Framework Logo

E’ sempre dura abbandonare la vecchia strada per la nuova. Per un annetto buono ci siamo abituati a configurare il Bootstrap a seconda delle esigenze, ognuno secondo i propri criteri (chi tutto in index.php, chi inizializzava una classe denominata Bootstrap, chi la stessa classe la registrava con registerPlugin nel frontController, ecc.). Ora Zend ha ufficializzato la “strada da percorrere” basandosi proprio sulle tante soluzioni “escogitate” dalla community degli sviluppatori. Il nuovo componente Zend_Application è ciò che Zend ha sviluppato come soluzione migliore.
A primo impatto (sto sbattendo la testa contro il muro da diversi giorni) il tutto è un po’ ostico ma ora, studiando con calma la documentazione, inizio a vedere la luce.

In un’applicazione configurata con pattern MVC spesso ci ritroviamo ad eseguire diverse operazioni: setup del database, configurare viste e view helpers, configurare uno o più layout, registrare plug-in, registrare action helpers e tanto altro. Allo stesso tempo potremmo avere un’applicazione complessa che richiama diverse procedure, ma magari non tutte richiedono MVC. Un cronjob per aggiornare giornalmente i dati, ad esempio, non richiede MVC. Lo stesso vale nel caso di eventuali servizi esterni, API, ecc.

Zend_Application ci aiuta a gestire al meglio tutta la fase iniziale di Bootstrap dell’applicativo in modo che questa risulti semplice da gestire, flessibile e quanto più riusabile in altri progetti.
Per iniziare ad utilizzare Zend_Application basta inizializzarlo nel nostro index.php:

/** Zend_Application */
require_once 'Zend/Application.php';
// Create application, bootstrap, and run
$application = new Zend_Application(
APPLICATION_ENV,
APPLICATION_PATH . '/configs/application.ini'
);
$application->bootstrap();
$application->run();

Nel creare una nuova istanza di Zend_Application passiamo 2 parametri:

  • APPLICATION_ENV – (es: production)
  • Path del file di configurazione (può anche essere un array o uno Zend_Config object)

Io, per i file di configurazione, ho sempre utilizzato i .ini e, per ora, continuo su questa strada. ;-)
Nel file application.ini possiamo configurare diversi paramentri tra cui quelli relativi al bootstrap stesso. La novità sta nel fatto che ora possiamo richiamare alcune risorse che Zend_Application caricherà automaticamente.

includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/bootstrap.php"
bootstrap.class = "Bootstrap"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.db.adapter = "PDO_MYSQL"
resources.db.params.host = "localhost"
resources.db.params.username = "root"
resources.db.params.password = "xxxxxxxx"
resources.db.params.dbname = "myDb"

Con il prefisso resources infatti richiamiamo il FrontController (configurando la controllerDirectory) e il DB con relativi parametri. Tali componenti saranno quindi disponibili nell’istanza di Zend_Application e potranno essere richiamati facilmente in altri “luoghi” dell’applicativo (come lo devo ancora capire bene!).
Vediamo ora come costruire la nostra classe Bootstrap che sarà posizionata in /application/bootstrap.php

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
}

In questo modo avremo un bootstrap che, dopo esser stato inizializzato in index.php, caricherà il frontController e il Database Adapter così come configurati nel file di configurazione (vedi sopra application.ini).
Nel caso volessimo avviare altri componenti (Layout, Auth, Acl, ecc.), classi e quant’altro, Zend_Application può essere sviluppata in questo modo:

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    protected function _initFoo()
    {
        // ...
    }
    protected function _initBar()
    {
        // ...
    }
    protected function _initBaz()
    {
        // ...
    }
}

La classe Bootstrap, estendendo la Zend_Application_Bootstrap_Bootstrap, ci permette di sfruttare una serie di metodi e convenzioni prestabilite. Prima tra tutte, ad esempio, quella che definisce che tutti i metodi protected che iniziano con _init vengono considerate risorse (“resource method“).
Qui viene il bello. Se desideriamo inizializzare una risorsa singola basta passare il nome come parametro del metodo bootstrap() nel file index.php, per due o più risorse basterà passarli con un array, per tutte non passiamo alcun parametro.

$bootstrap->bootstrap('foo'); // solo foo resource
$bootstrap->bootstrap(array('foo', 'bar')); // solo foo e bar resource
$bootstrap->bootstrap(); // TUTTE

In questo modo potremo attivare in modo molto semplice solo le risorse necessarie. Tornando agli esempi iniziali (vedi sopra), nel caso di accesso da parte di cronjob, possiamo far partire un bootstrap ridotto che carica i soli componenti necessari all’esecuzione delle operazioni schedulate.

Torno a studiare… ;-)

 

Pinguino imperatore

Aptenodytes forsteri,
descritto da G. R. Gray nel 1844, Mari Antartici.

Tux è la mascotte ufficiale del kernel Linux. Creato da Larry Ewing nel 1996, è un pinguino paffuto dall'aria contenta. L'idea che la mascotte di Linux dovesse essere un pinguino venne da Linus Torvalds, il creatore del kernel Linux.
[FSF Associate Member]
Free Software Foundation
Associate Member
Join!
Davide Gullo
   Crea il tuo badge