Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 04-03-2010 17:57:05

kiemtso
Nouveau membre
Date d'inscription: 30-12-2009
Messages: 7

récupérer l'action de la route

Bonjour,


J'arrives bien à récupérer le controlleur, mais j'aimerais aussi récupérer l'action du controlleur, avant d'arriver dans le controlleur (dans le fichier bootstrap, donc l'action qui 'devrait' être appelée)

Code:

class MachinController extends Zend_Controller_Action
{
    public function indexAction()
    {
    }
}

(dans ce cas, le 'index', voire le 'indexAction' )

Idem : j'aimerais récupérer la route qu'il va emprunter, dans le cas où les routes sont comme ceci :

Code:

foreach($menu_menu as $k => $v)
{
    $router->addRoute(
        $v['route'],
        new Zend_Controller_Router_Route(
            $v['url'],
                array(    'controller' => $v['controller'],
                        'action' => $v['action'],
                        'module' => $v['module'],
                        )
                    )
    );
}

Comment savoir quelle sera la route 'courante' ?

Merci par avance,

Hors ligne

 

#2 04-03-2010 18:48:12

Gorgoth
Membre
Date d'inscription: 25-02-2010
Messages: 20

Re: récupérer l'action de la route

Salut kiemtso,

j'ai pas bien compris ce que tu désires faire. Récupérer l'action qui va être éxecutée? (la pauvre big_smile)

Si tel est le cas, tu dois voir du côté des "routes" réalisées lors du dispatch de l'application. Pour cela, crées un plugin et enregistre le lors du bootstrap de ton application, dans la méthode run() de ton boostrap.

Code:

    public function run() {
        
        $errorHandler = new Zend_Controller_Plugin_ErrorHandler();
        
        $front = Zend_Controller_Front::getInstance();
        $default = $front->getDefaultModule ();
        if (null === $front->getControllerDirectory ( $default )) {
            throw new Zend_Application_Bootstrap_Exception ( 'No default controller directory registered with front controller' );
        }
        
        //ADDED the route plugin registration.
        $front->registerPlugin(new Mon_Plugin_BiRoute()); //<----ici
        
        $front->setParam ( 'bootstrap', $this );
        $front->dispatch ();
    }

En fait, lors du dispatch, ton frontController réalise dans l'ordre la méthode routeStartup des plugins qui ont été enregistrés, la méthode route du routeur, la méthode routeShutdown des plugins enregistrés, la méthode dispatchLoopStartup des plugins, la predispatch et va ensuite appeler le dispatch du dispatcher de ton application (j'espère que jusque la tu m'as suivi, parce que moi pas! big_smile)

La requete est formatée suivant l'URI lors de l'appel à la méthode route du routeur. Si tu veux donc intervenir il faut le faire après. Tu peux le faire avec le plugin personnalisé que tu as précedemment enregistré lors du bootstrap, lors du routeShutdown() de ce dernier, via l'objet request passé en paramètre lors du routeShutdown(Zend_Controller_Request_Abstract $request).

J'espère avoir été assez clair lors de l'explication smile

Je te laisse explorer un peu par toi même comment trouver les infos que tu cherches dans la requête wink si tu bloques hésites pas

Dernière modification par Gorgoth (05-03-2010 09:37:40)

Hors ligne

 

#3 05-03-2010 12:13:03

kiemtso
Nouveau membre
Date d'inscription: 30-12-2009
Messages: 7

Re: récupérer l'action de la route

J'arrives à récupérer ceci :

Code:

        $fc = Zend_Controller_Front::getInstance();

        $controller = $fc->getRequest()->controller;

        $action = $fc->getRequest()->action;

Seulement, j'aimerais le récupérer beaucoup plus tôt dans l'exécution du programme, pas seulement à partir du controlleur du front hmm

Hors ligne

 

#4 05-03-2010 15:14:07

Gorgoth
Membre
Date d'inscription: 25-02-2010
Messages: 20

Re: récupérer l'action de la route

ce que tu viens d'écrire, tu le réalises quand? Précise un peu plus stp que je puisse t'aider smile

Hors ligne

 

#5 08-03-2010 13:33:05

kiemtso
Nouveau membre
Date d'inscription: 30-12-2009
Messages: 7

Re: récupérer l'action de la route

Bonjour,

Pour prendre un exemple :
je vais chercher dans la base de données la configuration de la page en question, en fonction du controlleur et de l'action.

Donc, dans la base, ca ressemble à ca :
id
controller_id
action_id
configuration

L'idée est de récupérer le plus tôt possible ce champ dans la base. J'en ai besoin 'avant' le controlleur, vu que celui-ci prend les options de configuration.
Alors je pourrais toujours le mettre dans le controlleur, sauf que : lorsqu'il y a beaucoup de controlleurs, c'est pénible de l'écrire dans chaque.
Il doit y avoir une méthode pour récupérer les infos avant, pour que chaque controlleur ait l'info lorsqu'il est instancé.

Voilà,
Merci,

Hors ligne

 

#6 08-03-2010 13:39:33

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: récupérer l'action de la route

Utilise donc comme expliqué un plugin dans le routeShutdown() ou fias un controller avec tes traitements dans la méthode init, et fait hériter tous tes controllers de celui ci.
Ce genre de problématique (effectuer un traitement commun au démarrage de tous les controllers) a déjà été abordé plusieurs fois sur ces forums.

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