Déplacement du code d'initialisation dans un plugin

Pour réaliser nos tests, nous allons devoir mettre en place un certain nombre de choses, comme nous le réalisons actuellement dans bootstrap.php. Globalement, on va faire la même chose, sauf qu'on va utiliser une base de données différente pour les tests. Pour que le code soit mieux organisé, on va déplacer une partie du code de bootstrap.php dans un plugin. L'avantage de ce dernier, c'est qu'il va pouvoir intervenir non seulement au démarrage, avant l'appel de dispatch sur le contrôleur frontal, mais aussi à d'autres moments clés. Vous pouvez par exemple utiliser le profileur Zend_Db_Profiler en l'initialisant dans le constructeur du plugin, puis en ajoutant les données du profilage à votre sortie. La classe pourra également être réutilisée pour un autre projet.

Nous modifions donc le fichier bootstrap.php :

/application/bootstrap.php


<?php
require_once 'Zend/Loader.php'

// Installe le chargeur automatique de classes
Zend_Loader::registerAutoload(); 

// Charge la classe d'initialisation
require_once 'Initializer.php';
 
// Récupère une instance de controlleur principal
$frontController Zend_Controller_Front::getInstance(); 

// Enregistre le plugin d'initialisation
$frontController->registerPlugin(new Initializer('development')); 

// Demande au controller de traiter la requête
$frontController->dispatch();
?>

Et nous créons un nouveau fichier qui va contenir le code de notre plugin.

/application/Initializer.php


<?php
class Initializer extends Zend_Controller_Plugin_Abstract
{
  public function 
__construct ($env 'production')
  {
    
// On indique l'endroit où sont placés les contrôleurs
    
Zend_Controller_Front::getInstance()->addControllerDirectory('../application/controllers');
        
    
// On prépare une connexion avec le driver PDO MySQL
    
switch($env) {
      case 
'test':
        
$dbname 'votreapp_test';
        break;
      default:
        
$dbname 'votreapp';
    }
    
$db Zend_Db::factory('pdo_mysql', array(
       
'host' => 'localhost' ,
        
'username' => 'root' ,
        
'password' => '' ,
        
'dbname' => $dbname
    
));
        
    
// On place l'instance de la connexion dans le registre
    
Zend_Registry::set('db'$db);
  }
}
?>

Ajouter un commentaire