2009-10-08 8 views
1

J'ai deux itinéraires qui correspondent à une URL avec le même motif apparent, la différence réside dans la actionRoute $, cela ne devrait être adaptée si la variable: l'action sur elle est égale à « myaction ».exigences Zend_Router désadaptation

Si je vais à /fr/mypage/whatever/myaction il se passe comme prévu via $ actionRoute.
Si je vais à /fr/mypage/whatever/blahblah il obtient rejeté par $ actionRoute et compensée par $ genRoute.
Si je vais à /en/mypage/quel que soit, il doit correspondre à $ genRoute, mais il est remplacé par $ actionRoute au lieu de lancer et d'exception car l'action noactionAction() n'existe pas.

Je ne sais pas ce que je fais mal, je vous remercie de votre aide.

 $genRoute = new Zend_Controller_Router_Route(
    ':lang/mypage/:var1/:var2', 
    array(
    'lang' => '', 
    'module' => 'mymodule', 
    'controller' => 'index', 
    'action' => 'index', 
    'var1' => 'noone', 
    'var2' => 'no' 
    ), 
    array(
    'var1' => '[a-z\-]+?', 
    'lang' => '(es|en|fr|de){1}' 
    ) 
); 
    $actionRoute = new Zend_Controller_Router_Route(
    ':lang/mypage/:var1/:action', 
    array(
    'lang' => '', 
    'module' => 'mymodule', 
    'controller' => 'index', 
    'action' => 'noaction', 
    'var1' => 'noone', 
    ), 
    array(
    'action' => '(myaction)+?', 
    'var' => '[a-z\-]+?', 
    'lang' => '(es|en|fr|de){1}', 
    ) 
); 
    $router->addRoute('genroute',$genRoute); 
    $router->addRoute('actionroute',$actionRoute); 

Répondre

0

En fournissant une valeur par défaut ('noaction') pour une action dans votre $ actionRoute, vous faites cette variable en option. Si vous supprimez cela, tout devrait bien fonctionner. De même, la clé 'var' dans les motifs de regexp dans votre deuxième route devrait probablement être 'var1' comme dans votre premier.

Donc, vous voulez probablement votre deuxième voie d'être:

$actionRoute = new Zend_Controller_Router_Route(
    ':lang/mypage/:var1/:action', 
    array(
    'lang' => '', 
    'module' => 'mymodule', 
    'controller' => 'index', 
    'var1' => 'noone', 
    ), 
    array(
    'action' => '(myaction)+?', 
    'var1' => '[a-z\-]+?', 
    'lang' => '(es|en|fr|de){1}', 
    ) 
); 
+0

Salut Tim, ça ne fonctionne pas, il jette une exception avec le message « action non spécifiée ». Merci quand même. – elbicho

+0

étrange, je l'ai testé votre code d'exemple et il ne fonctionne pour moi avec cette solution en place. Quelle version de ZF utilisez-vous? Une autre solution hacky serait de remplacer: action « myaction » dans votre actionRoute $, retirez le regexp pour l'action et l'action du code difficile à « myaction » dans le premier tableau. –

+0

J'utilise 1.8.4PL1 – elbicho

Questions connexes