L'environnement d'execution
By Geoffrey on Thursday 12 October 2006, 21:51 - Coding - Permalink
Tags :
Voilà un article que j'avais déjà proposé sur un site a caractère privé, un peu remis au gout du jour et étoffé de quelques informations et ressources non négligeables. Nous verrons ici comment mettre en place un environement d'execution standard du Zend Framework, également appelé bootstrap de l'autre coté de l'atlantique.
Un petit dessin valant mieux qu'un long discours, entrons dans le vif du sujet. On assume ici un environnement préinstallé: Apache / PHP5 / MySQL, avec une copie du Zend Framework dans /usr/share/zend/, ainsi que le .htaccess suivant à la racine de votre site (il semblerait que cette dépendance à mod_rewrite soit sur la liste des choses à éliminer avant la release):
RewriteEnfine On RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php
On peut également utiliser les règles suivantes, qui comportent l'avantage d'une plus grande simplicité pour intégrer des éléments d'application externe:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php
L'environnement
Les plus perspicaces d'entre vous l'auront surement déjà deviné, le fichier www/index.php servira de bootstrap, c'est à dire de point d'entrée unique pour toute l'application. Le Zend Framework se chargera lui même de décortiquer l'URL pour tenter de deviner ce à quoi l'utilisateur pouvait bien penser quand il a cliqué !
Pour ce qui est de l'arborescence de fichiers conseillée, un peu d'organisation est recommandée.
Pour utiliser le Zend Framework en toute quiétude, il nous faut nous assurer qu'il pourra accéder à ses propres composants. La première chose à faire est donc de modifier l'include_path:
set_include_path(get_include_path().PATH_SEPARATOR.realpath(dirname(__FILE__).'/../library/'));
Il n'est pas inutile également de prendre quelques précautions d'usage:
ini_set('error_reporting', E_ALL); # | E_STRICT);
if (get_magic_quotes_gpc()) {
die('<strong>E_NOOB_ERROR</strong>: magic_quotes_gpc must be turned off.');
}
set_magic_quotes_runtime(false);
Last but not least, on charge la librairie Zend:
require_once 'Zend.php';
Ainsi préparés, nous pouvons nous plonger en toute quiétude dans la mise en place de quelques objets qui nous serons bien utiles tout au long du développement de notre application.
Les objets
La mise en place des objets est on ne peut plus claire. On configure le front controller (Zend_Controller_Front) pour lui dire où trouver les controllers, puis on configure les vues (Zend_View) pour leur dire où trouver... les vues :-) On enregistre ensuite l'objet $view dans le registre, qui n'est rien de plus qu'un endroit pratique où stocker des objets/données pour y avoir accès plus tard (Zend::register($name, $value) et $var = Zend::registry($name);).
Une petite liste (non exhaustive) d'objets interressants à stocker dans le registre:
Zend_Db
Zend::loadClass('Zend_Db');
Zend::loadClass('Zend_Db_Table');
$params = array(
'host' => 'localhost',
'username' => 'someobscureusername',
'password' => 'someobscurepassword',
'dbname' => 'yourdbname'
);
$db = Zend_Db::factory('PDO_MYSQL',$params);
Zend_Db_Table::setDefaultAdapter($db);
Zend::register('db', $db);
Zend_Config
Je vous renvois à mon article sur la gestion de la configuration :-)
Zend_View
Zend::loadClass('Zend_View');
$view = new Zend_View;
$view->setScriptPath(realpath(dirname(__FILE__).'/../app/views/'));
Zend::register('view', $view);
Le Dispatch
Dernière étape, le dispatch, qui utilise les objets Zend_Controller_Router et Zend_Controller_Dispatcher. Ces deux objets sont au coeur du processus de sélection du controller à executer. Le Router va déterminer, à partir de l'environnement (en général l'URL, via $_SERVER['REQUEST_URI'] par exemple) quelle action executer et dans quel controller, tandis que le Dispatcher va s'occuper lui de les trouver (par exemple dire FooController::bar(), dans controllers/FooController.php).
Le Zend Framework gère en natif les friendly urls, et ça c'est chouette. Par exemple: les urls suivantes:
- http://example.com/foo/bar
- http://example.com/foo
- http://example.com/
Seront analysées comme suit par le Routeur par défaut:
- controller: foo, action: bar
- controller: foo, action: index
- controller: index, action: index
Dernières choses à savoir sur la théorie:
- quand le controlleur est défini par l'url mais non trouvé par le
Dispatcher, celui ci executeindex/noRoute. - les controllers sont des classes qui étendent
Zend_Controller_Action(ou une classe qui elle même l'étend) - le Dispatcher par défaut va executer(en supposant une url type
http://example.org/foo/bar)FooController::barActiondansFooController.php(modulo le path déterminé avecZend_Controller_Front::setControllerPath)
Les vues
Dernier point de cette brève excursion dans le Zend Framework, les vues. Pas grand chose à en dire pour le moment, si ce n'est que par défaut l'objet Zend_View se contente d'include() les fichiers templates. Il parait que l'intégration avec des moteurs de template (Smarty par exemple) est très aisée, mais comme je ne suis pas fan de ce genre de choses, ce ne sera pas couvert ici :-)
no comment
This post's comments feed