Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour à tous,
Je suis en train de développer une appli avec ZF2 mais je rencontre un problème.
En fonction de la route demandée, je voudrais rediriger vers une autre action avant le dispatch.
Pour cela, j'ai fait ce code qui marche parfaitement :
public function __construct() { $this->getEventManager()->attach('dispatch', array($this, 'preDispatch'), 1000); }
Jusqu'à là, il n'y a pas de problème, mais je voudrais garder la même url et ne pas recharger la page comme avec un
$this->redirect()->toRoute();
.
En fait je voudrais faire comme un
$this->forward()->dispatch();
mais sans exécuter l'action initialement appélée.
Avez vous des solutions pour faire ça?
Merci de vos réponses.
Hors ligne
Je ne comprend pas très bien ce que tu veux dire par:
"En fonction de la route demandée, je voudrais rediriger vers une autre action avant le dispatch."
à chaque fois que tu appellera ta route tu doit changer d'action?
plusieurs routes renvoient vers la même action?
une route à plusieurs actions possible? (du au droit de l'utilisateur? au hasard?)
Enfin bref, détails un petit peu ce que tu voudrais faire s'il te plait ^^
Dernière modification par flobrflo (28-06-2013 15:03:20)
Hors ligne
En fait une route pourrait avoir plusieurs actions possible.
En gros, mon site est complètement dynamique, je n'ai que deux routes :
'router' => array( 'routes' => array( 'error404' => array( 'type' => 'segment', 'options' => array( 'route' => '/error/404', 'defaults' => array( 'controller' => 'Render\Controller\Error', 'action' => 'notfound', ), ), ), 'render' => array( 'type' => 'segment', 'options' => array( 'route' => '[/][:params]', 'defaults' => array( 'controller' => 'Render\Controller\Render', 'action' => 'index', ), ), ), ), ),
En fonction des paramètres de la route "render", je vais chercher la bonne page si elle existe en base. Et du coup si elle n'existe pas, je voudrais appeler l'action "notfoundAction" qui correspond à l'autre route.
Hors ligne
Et bien, déjà je te conseille de bien réfléchir à ta méthode d'utilisation des routes, cela est peut être nécessaire dans ton cas, mais n'utiliser qu'une seule route pour tout un site n'est pas souvent très adapté.
A première vue je ne vois pas trop comment "changer l’exécution d'action" mais tu a d'autres moyens de le faire:
si tu ne trouve pas ta page, ajouter une variable dans ton view Model type: 'error_notfound' => 'error'
et dans ton layout vérifier si tu a une erreur:
... <?php if(isset($vars["error_notfound"]) && $vars["error_notfound"] == 'error') : ?> <p>Ceci est une 404</p> <?php else : ?> //afichage de ton contenu habituel <?php echo $this->content; ?> <?php endif; ?> ...
si tu prépare bien ton layout, pas besoin de changer d'action et tu pourra avoir une 404 sur n'importe laquelle de tes vues.
Dernière modification par flobrflo (28-06-2013 15:38:02)
Hors ligne
Pages: 1