Bootstrap ZF, le retour

Il y a quelque temps j'avais présenté ma classe de bootstrap. Après avoir lu pas mal d'articles sur le sujet, je l'ai quelque peu améliorée et je vais vous présenter cette nouvelle version. En fin de billet, un zip avec la classe et une arborescence Zend Framework toute faite, prêt à l'emploi! J'étais plutôt content de ma première classe de bootstrap et j'en ai évidemment repris l'idée. J'ai cependant tout recoder! La méthode conventionnelle (à priori, c'est du zf, on ne sait jamais!) consiste à créer une classe Bootstrap (Bootstrap.php) dans le dossier application. Dans celle-ci on ajoute une méthode statique run() qui lance plusieurs méthodes statiques, chacune dédiée à une tâche. Cela donne quelque chose comme:
class Bootstrap
{
  public static function run()
  {
    self::setupFrontController();
    self::setupDatabase();
  }

  public static function setupFrontController() { ... }

  public static function setupDatabase() { ... }
}
C'est simple et on ne se prend pas la tête. C'est là où je me suis dit que ma classe App était peut-être trop compliquée! Néanmoins j'aime bien le fait de pouvoir réutiliser des actions de bootstrap à travers plusieurs projets (front controller, config, base de données - c'est pratiquement tout le temps la même chose).

La nouvelle classe s'appelle Beehind_App. Beehind est effectivement de retour comme je l'avais annoncé dans un billet il y a quelque temps. Je ne vais pas en parler ici mais je reviendrai rapidement dessus, probablement avant la fin de la semaine. Pour utiliser Beehind_App, il est conseiller de l'étendre avec une classe App. J'aime bien cette méthodologie (une classe App par projet) et je la conseille fortement. Dans App, on peut définir des méthodes comme dans la méthode présentée précédemment. Les méthodes doivent ensuite être appelées dans l'ordre voulu dans la méthode bootstrap(). Un exemple:
class App extends Beehind_App
{
  public function bootstrap()
  {
    $this->setupFrontController();
  }

  public function setupFrontController() { ... }
}
Remarquez que les méthodes ne sont pas statique. En effet, on peut récupérer à n'importe quel moment l'instance de la classe App avec App::getInstance(). Tout cela est donc très conventionnel! Maintenant voyons comment utiliser un bootstrap réutilisable. On peut ajouter dans le processus de bootstrap des classes. Ces classes seront instanciées et une méthode bootstrap() sera appelée sur chacune d'entre elles. L'instance de App sera passé en paramètre de cette dernière. Tout ceci après la méthode bootstrap() de la classe App. Lors du démarrage de l'application, ou a n'importe quel moment avant le bootstrap, on peut préciser les classes à exécuter. Créons par exemple une classe App_Bootstrap_Config qui sera chargée d'initialiser la configuration:
class App_Bootstrap_Config
{
  public function bootstrap($app)
  {
    $app->getRegistry()->configuration = new Zend_Config();
  }
}
Beehind_App utilise Zend_Loader_PluginLoader. On doit donc ajouter le chemin vers cette classe. Dans le fichier index.php:
App::getInstance()->addBootstrapPath('App/Boostrap', 'App_Bootstrap');
On pourrait aussi faire ceci dans la méthode bootstrap() de notre classe App. Finalement, on démarre l'application avec la méthode statique run(). Celle-ci prend comme premier argument la racine de l'application (généralement le dossier parent, i.e. "..") et optionnellement la liste des classes a exécuter.
App:run('..', array('Config'));
Au fil du temps, on peut donc se construire des classes de bootstrap avec toutes nos petites fonctionnalités! Le dispatch se fait automatiquement à la fin du bootstrap. Il est possible de modifier se comportement en utilisant setAutoDispatch(false). Dans le zip vous trouverez comme précisé précédemment, une arborescence complété prêt à l'emploi. Elle est constituée des dossiers application, htdocs et libraries. Vous trouverez aussi la classe Beehind_App avec des classes de bootstrap (dans libraries/Beehind/App/Bootstrap). Vous pourrez ainsi commencer à développer tout de suite! Les classes disponibles sont:
  • Config: charge la configuration depuis le fichier /application/config.ini
  • FrontController: initialise le front controller, par défaut les controllers sont dans /application/controllers
  • View: initialise les vues et Zend_Layout. Les layouts sont stockés dans /application/views/layouts
  • Db: initialise la base de données à partir de la clé de configuration db (voir config.ini fourni). Les modèles sont stockés dans /application/models
Cliquez ici pour télécharger le zip J'espère que cette petite classe vous plaira! J'espère avoir quelques retours... A très vite!

comments powered by Disqus

15/05/2008