Zend Framework : comment rediriger proprement ?

Dans: Programmation|Zend Framework

29 juil 2008

Aujourd’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 ;-)

2 réponse to Zend Framework : comment rediriger proprement ?

Avatar

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.

Avatar

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.

Commentez ce billet

Nota : Tous les commentaires sont modérés à posteriori.

A propos

Un blog technologique, sur le développement, sur le Zend Framework, sur PHP et aussi une petite touche d'entreprenariat.

ElePHPants

    elePHPant at lake gardaelePHPant at lake gardaelePHPant at lake garda
  • Kalil: Bonjour, Un nouveau site à l'air innovant est apparu sur le marché. Il s'agit de www.code-prene [...]
  • LucSens: "Lost in Japan" and "Lost in China" offer support for Japanese and Chinese - you just take a photo w [...]
  • Ludovic: Un grand merci pour ce super tutoriel qui m'a permis d'intégrer sans difficultés Doctrine à Zend [...]
  • crazyball: Bonjour, merci pour ce super tuto, par contre est il possible de faire une auto-completion de type " [...]
  • Elio DUFOUR: Hello, j'ai trouvé votre site sympa via Google et je tenais à vous le dire. [...]

En ce moment...

Posting tweet...

Partenaires