2013-02-07 7 views
1

Je rencontre un problème avec mes itinéraires.Problème de routeur Zend

Alors disons que je le TestController avec l'action modifier, qui obtient un paramètre nommé « nom ». L'URL d'accès est test.com/test/edit/name/randomname.

Je voulais le faire afin qu'il puisse être accessible par test.com/test/edit/randomname, donc j'ajouté ce dans la fonction _initRoutes dans Bootstrap.

$router = Zend_Controller_Front::getInstance()->getRouter(); 
      $route = new Zend_Controller_Router_Route(
       'test/edit/:name', 
       array('controller' => 'test', 'action' => 'edit', 'name' => 'Default')); 
     $router->addRoute('edit-test', $route); 

Donc, cela fonctionne comme je le veux, mais un autre problème est survenu. J'ai un lien dans la layout.phtml qui est quelque chose comme

<a href="<?php echo $this->url(array('controller' =>'account','action'=>'logout'));?>">Logout</a> 

Le problème est que lorsque je navigue à test.com/test/edit/randomname, le lien ci-dessus pour quelques changements de raison étranges et pointe vers le même URL que ci-dessus, c'est-à-dire test.com/test/edit/randomname.

Qu'est-ce qui ne va pas?

Remarque: En utilisant des modules, le TestController est dans le module par défaut.

Répondre

3

Dans le passé, j'ai dû spécifier l'itinéraire à utiliser avec l'assistant de vue url(). Depuis votre itinéraire logout semble utiliser la route par défaut, spécifiez dans l'invocation url():

<a href="<?php 
    echo $this->url(array(
    'controller' =>'account', 
    'action'  =>'logout' 
), 'default'); ?>">Logout</a> 

Si vous ne explicity préciser l'itinéraire, l'itinéraire actuel s'utilisé, ce qui dans votre cas est probablement la route edit-test.

+0

Vous avez raison, cela a résolu mon problème et merci pour l'info sur le routage. – Systemfreak

+0

Retiré ma réponse comme le vôtre est meilleur. Je n'ai jamais vraiment compris pourquoi ZF ne nécessite pas les deux params. –

+0

@TimFountain: Oui, par défaut à la route actuelle me semble étrange. Peut-être que l'intention est d'accommoder le cas d'utilisation le plus simple dans lequel il n'y a pas de routes nommées. –