2009-05-27 8 views
0

Cette question est liée à this oneComment spécifier une valeur par défaut dynamique pour une clé dans un routeur, Zend Framework

Comment puis-je configurer la valeur par défaut de la partie de la catégorie à la valeur de catégorie dans l'URL de la demande?

$Router=$this->_front->getRouter(); 
$CategoryRoute = new Zend_Controller_Router_Route('category/:category/:controller/:action/*', 
      array(
       'controller' => 'index', 
       'action'  => 'index', 
       'category' => 'aaa' 
      )); 
$Router->addRoute('category', $CategoryRoute); 

En d'autres termes, je dois la valeur [aaa] pour la valeur de la catégorie dans le temps que je suis la construction de cette route. Il y aura toujours une valeur pour [catégorie], sinon elle utilisera la route par défaut.

Exemple de ce que je veux dire:
Si je surfe sur le site avec l'URL http://baseurl/category/mycat/index
je vais routé au contrôleur = indice, action = index, catégorie = macategorie.
Mais, dans tous mes fichiers de vue, où j'utiliser l'assistant Zend_View :: url(), les liens pointeront vers:
http://baseurl/category/aaa/somthing/somthing (Utilisation de l'itinéraire exact ci-dessus)
Alors que j'ai réellement besoin de les pointer vers: Cela se produit parce que la valeur par défaut pour la catégorie est écrite comme une constante dans la route, et non prise, en quelque sorte, à partir de l'URL actuelle.
Je résous actuellement cela en extrayant par moi-même la catégorie de l'URL et en faisant la valeur par défaut.

+0

Pourriez-vous clarifier avec certaines URL et ce qui fonctionne et ne fonctionne pas? –

Répondre

0

Y a-t-il une question dans votre message? :)

Si je vous ai droit - yousetup votre défaut catégorie et il sera utilisé si vous appelez

$this->url(array(),'category'); 

Mais lorsque vous utilisez

$this->url(array('category'=>'my-category'),'category'); 

il retournera catégorie/my-category/index/idnex au lieu de catégorie/aaa/index/index

+0

Non, je vais toujours utiliser url (array(), null, true); Le routeur utilisé sera décidé par l'URI. Cela fonctionne bien. Le problème est que l'assistant url() ne prend pas la valeur de la catégorie de l'URL, mais s'attend plutôt à ce que je l'insère manuellement dans l'url de l'assistant (array ('category' => 'somevalue')); C'est ce que j'essaie d'éviter. Je peux éviter cela en entrant une valeur par défaut à [catégorie] lorsque je construis la nouvelle route.Le problème est, c'est une valeur statique, où il doit être la valeur dans l'URL. Je résous cela temporairement en m'extrayant de la valeur de [catégorie] et en en faisant la valeur par défaut. –

+0

Cela ne devrait pas arriver. Le dernier paramètre de url() bascule "route reset" - si c'est rapide ou non, alors l'itinéraire doit être rempli à partir de l'URL actuelle. Essayez de jeter la route utilisée. (sth comme $ frontContr-> getRouter() -> ...) –

+0

* fast = false;) –

0

Si vous utilisez

$this->url(array(), 'category'); 

il devrait fonctionner. Mais gardez à l'esprit: tant que vous respectez les valeurs par défaut, vous obtiendrez toujours un lien simple/catégorie, mais lorsque vous utilisez différents paramètres, il convient de renvoyer l'URL correctement adaptée en fonction de l'URI en cours.

ie. si URI est/category/aaa/index/index alors $ this-> url (array(), 'category'); retournera/category, si URI est/category/xxx/index/index alors $ this-> url (array(), 'category'); retournera/category/xxx, si URI est/category/xxx/index/process puis $ this-> url (array(), 'category'); retournera/category/xxx/index/process, etc.

Questions connexes