Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Salut,
Je voudrais savoir s'il est possible de paramétrer des routes uniquement pour un de mes controllers.
Je m'explique :
- j'ai 3 modules dont un qui se nomme frontend.
- dans mon module frontend j'ai mes controllers (index, controller1, controller2, ...).
- j'ai déjà un routage qui est réalisé pour le changement de langue. les urls sont de la forme : http://www.monsite.com/lang/controller1/action1/
Je souhaite créer un routage spécifique uniquement pour mon controller2, il aurait des adresses du type :
http://www.monsite.com/lang/controller2/param1
Comment puis-je faire ?
Dernière modification par Flizer (02-01-2010 16:15:15)
Hors ligne
Je ne vois pas comment faire, personne n'a déjà fait celà ?
Est-ce possible ?
Hors ligne
Ben tu ajoutes un 2e routage après le 1er (les derniers routages ont la priorité).
A+, Philippe
Hors ligne
Justement, le deuxième écrase le premier. Du coup le premier ne fonctionne plus.
$router = new Zend_Controller_Router_Rewrite(); $route = new Zend_Controller_Router_Route( "/:@language/:@controller/:@action/*", array( "language" => "fr", "module" => "frontend", "controller" => "index", "action" => "index" ), array('language' => '[a-z]{2}') ); //URL Collection $test = new Zend_Controller_Router_Route( "/:@language/:@controller/:espece", array( "language" => "fr", "module" => "frontend", "controller" => "collection", "action" => "oiseau" ), array(1 => 'espece') );
Hors ligne
ta 2e route n'est pas bonne elle continue à intercepter tous les controlleurs
$router = new Zend_Controller_Router_Rewrite(); $route = new Zend_Controller_Router_Route( "/:@language/:@controller/:@action/*", array( "language" => "fr", "module" => "frontend", "controller" => "index", "action" => "index" ), array('language' => '[a-z]{2}') ); //URL Collection $test = new Zend_Controller_Router_Route( "/:@language/collection/:espece", array( "language" => "fr", "module" => "frontend", "controller" => "collection", "action" => "oiseau" ), array(1 => 'espece') );
J'ai remplacé ton :@controller par collection dans ta route. Sinon la 2e route intercepte n'importe quel controller...
A+, Philippe
PS : pour me coucher moins bête ce soir, que signifie tes "@" devant tes variables dans tes routes ?
Hors ligne
Pour les "@" je ne connais pas leur utilité, je pensais que c'était obligatoire sauf pour les paramètres. En fait c'était sur un tutoriel que j'avais suivi pour apprendre les routes. J'ai pas réussi à le retrouver désolé, il faut dire que j'en ai passé tellement ...
J'ai essayé ta méthode, que j'avais déjà tenté, elle fonctionne, mais me casse mes urls traduites.
Pour faire court, j'ai un peu triché, je récupère la langue de l'url dans le Bootstrap (je sais c'est pas bien), mais ça me simplifie pas mal la vie. Du coup j'ai une fonction _initTranslate(), puis _initRoute() dans mon Bootstrap.
et tout fonctionne impeccable sauf cette maudite route spécifique.
Hors ligne
Et puis il faut que je cré aussi une route pour chaque langue du coup avec ta méthode. C'est pour cela que j'avais mis :@controller dans le deuxième. La conséquence a été l'écrasement de ma première route. Logique ...
Je vais tenter avec une condition pour ma route "collection" en trichant comme avec la langue. Ca me plait pas de faire ça mais je n'ai pas le choix.
Dernière modification par Flizer (08-01-2010 12:00:32)
Hors ligne
J'y suis arrivé, j'ai eu un problème en enlevant les "@". Je ne sais pas exactement à quoi ils servent, mais je sais que mes urls traduites ne fonctionnent pas s'ils n'y sont pas.
Par contre la méthode que j'ai utilisé n'est pas propre ... Si quelqu'un sait comment faire proprement je suis preneur.
Hors ligne
le @ indique que la variable peut être traduites donc tu peux les laisser ça n'entre pas en compte pour ton problème
montre nous ton code complet avec les appels à "addRoute"
Hors ligne
ok pour le "@", ça ne me surprends pas.
voilà le code :
$router = new Zend_Controller_Router_Rewrite(); $route = new Zend_Controller_Router_Route( "/:@language/:@controller/:@action/*", array( "language" => "fr", "module" => "frontend", "controller" => "index", "action" => "index" ), array('language' => '[a-z]{2}') ); //URL Collection $test = new Zend_Controller_Router_Route( "/:@language/collection/:espece", array( "language" => "fr", "module" => "frontend", "controller" => "collection", "action" => "oiseau" ), array(1 => 'espece') ); $route->assemble(array('controller'=>'birds', 'action'=>'list', 'language'=>'en')); $router->addRoute("birds",$route); $router->addRoute("collection",$test); $frontController = Zend_Controller_Front::getInstance(); $frontController->setRouter($router);
J'ai une solution fonctionnelle actuellement, c'est simplement qu'à le faire autant le faire propre.
Hors ligne
Pages: 1