Techno, Développement, Entreprendre et au-delà !
Dans: Programmation|Zend Framework
29 juil 2008Aujourd’hui, une petite astuce qui vous permettra de rediriger proprement au sein de vos controllers et actions. J’imagine que les plus aguerris d’entre vous en Zend Framework, connaissent déjà cette astuce, mais je la livre pour toutes celles et ceux qui débutent (nous sommes tous passés par là!).
Si par exemple, vous utilisiez cette syntaxe pour rediriger :
$this->_forward('mon_action', 'mon_controlleur');
exit;
Vous pouvez généreusement là remplacer par la syntaxe suivante :
$this->_redirector->gotoUrl('/moncontrolleur2/monaction/');
C’est plus simple ? Oui et non…
En fait pour pouvoir utiliser ce code ci-dessus, vous aurez besoin de paramétrer votre contrôleur de la façon suivante :
<?php
class Moncontrolleur1Controller extends Zend_Controller_Action
{
protected $_redirector = null;
public function init()
{
$this->_redirector = $this->_helper->getHelper('Redirector');
}
public function uneactionAction()
{
// Ici j'effectue mes traitements
$this->_redirector->gotoUrl('/moncontrolleur2/monaction/');
}
}
Alors quel est donc l’avantage de cette méthode qui alourdit tout de même le code ?
Oui, je vous l’accorde, le code est légèrement alourdit mais l’avantage de cette méthode est que votre url dans votre navigateur est mise à jour, ce qui n’était pas le cas avec $this->_forward.
Cela vous permet d’assurer une cohérence dans l’expérience de navigation de l’utilisateur, il sait en permanence où il se trouve. Il n’y a pas de décorrélation entre le contenu affiché du site et le contenu de la barre d’url.
Voilà pour de plus amples détails, je vous encourage vivement à consulter la doc officielle qui regorge d’options à implémenter ou pas sur ce sujet.
La documentation sur l’aide d’action Redirector
Bonne route
Un blog technologique, sur le développement, sur le Zend Framework, sur PHP et aussi une petite touche d'entreprenariat.
2 réponse to Zend Framework : comment rediriger proprement ?
bkill
août 2nd, 2008 at 10 h 07 min
A noter qu’il existe également, tout comme la méthode Zend_Action_Controller::_forward(), la méthode Zend_Action_Controller::_redirect(), qui procure l’effet attendu, et le réel changement d’URL, plutôt que le forward vers une autre action du controller.
public function uneactionAction()
{
//... traitements
$this->_redirect('/moncontrolleur2/monaction/');
}
Pour une simple redirection, je pense que cette méthode pourrait très bien convenir.
L’avantage du helper Redirector est qu’il propose un niveau de config plus avancé, comme par exemple faire le redirect basé sur une route définie (en lui passant simplement les paramètres de la route), ou encore la définition d’un redirector commun à toutes les actions d’un controller.
Frédéric Blanc
août 2nd, 2008 at 11 h 23 min
En effet, Ludovic, pour une simple redirection ta méthode est amplement suffisante et a l’indéniable avantage de ne pas surcharger inutilement le code. Le helper sera plutôt utilisé pour des redirections plus paramétrées.
Merci pour ta remarque pertinente.