Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 25-06-2013 17:07:51

loulou
Nouveau membre
Date d'inscription: 25-06-2013
Messages: 2

redirection sans rechargement de page en preDispatch

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 :

Code:

    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

Code:

$this->redirect()->toRoute();

.

En fait je voudrais faire comme un

Code:

$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

 

#2 28-06-2013 15:02:44

flobrflo
Membre
Lieu: Marseille
Date d'inscription: 26-04-2013
Messages: 376

Re: redirection sans rechargement de page en preDispatch

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

 

#3 28-06-2013 15:16:56

loulou
Nouveau membre
Date d'inscription: 25-06-2013
Messages: 2

Re: redirection sans rechargement de page en preDispatch

En fait une route pourrait avoir plusieurs actions possible.

En gros, mon site est complètement dynamique, je n'ai que deux routes :

Code:

    '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

 

#4 28-06-2013 15:37:34

flobrflo
Membre
Lieu: Marseille
Date d'inscription: 26-04-2013
Messages: 376

Re: redirection sans rechargement de page en preDispatch

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:

Code:

...
<?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

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages