Url de ZF et distribution des rôles aux contrôleurs
Avec Zend Framework, de base le système mis en place par le contrôleur est celui-ci :
url |
module |
contrôlleur |
action |
paramètre |
http://exemple.test/ |
default |
index |
index |
|
http://exemple.test/news |
default |
news |
index |
|
http://exemple.test/news/ajouter |
default |
news |
ajouter |
|
http://exemple.test/news/modifier/id/5 |
default |
news |
modifier |
id=5 |
http://exemple.test/news/modifier/?id=5 |
default |
news |
modifier |
id=5 |
Avec des modules perso
Maintenant ajoutons la gestion des modules news et livredor:
$ctrl->setControllerDirectory( array( 'news' => '/module/news/controllers', 'livredor' => '/livredor/ctrl' ) );
url |
module |
contrôlleur |
action |
paramètre |
http://exemple.test/ |
default |
index |
index |
|
http://exemple.test/news |
news |
index
|
index |
|
http://exemple.test/news/ajouter |
news |
ajouter |
index
|
|
http://exemple.test/news/modifier/id/5 |
news |
modifier |
id
|
|
http://exemple.test/news/modifier/?id=5 |
news |
modifier |
index |
id=5 |
Comprendre le Zend_Controller_Router_Route
ce que l’on vient de voir s’explique par ceci :
$route = new Zend_Controller_Router_Route( ':module/:controller/:action/*', array('module' => 'default') ); $router->addRoute('default', $route);
Ce qui correspond à l’option par défaut. De plus, ceci nous montre un exemple de paramètre par défaut, en effet à module, on attribue la valeur default
.
Allons plus loin et créer nos propres routes!
Route personnalisée
imagions un espace membre, on désire afficher chaque profile. On pourrait imaginer quelque chose du genre : http://exemple.test/profil/voir/id/5
ou encore http://exemple.test/profil/voir/membre/grummfy
afin d’avoir le contrôleur profil
et et l’action voir
. Cependant ce n’est ni joli, ni pratique. Utilisons donc le Zend_Controller_Router_Route
$route = new Zend_Controller_Router_Route( 'profiledemembre/:username/*', array( 'controller' => 'profil', 'action' => 'voir' ) ); $router->addRoute('myProfileRoute', $route);
Ce qu’on fait pour les url du type http://exemple.test/profiledemembre/grummfy
, on assigne les valeurs suivantes :
* controller = profil * action = voir * username = grummfy, ceci via les : * et on garde la possibilité d'avoir des paramètres avec *
Dans le contrôleur profil, on fera ceci :
<?php public function voirAction() { $request = $this->getRequest(); $username = $request->getParam('username'); // ou $username = $this->_getParam('username'); }
Aller plus loin
Le manuel de Zend vous enseignera comment faire des url avec expression régulière ou encore des rotue static, et bien plus! Mais aussi cette autre page : http://framework.zend.com/manual/fr…