2010-09-21 4 views
1

J'ai deux voiesZend Router précédence

; category route 
resources.router.routes.category.type = "Zend_Controller_Router_Route" 
resources.router.routes.category.route = "shopping/:idTwo/:id/*" 
resources.router.routes.category.defaults.module = "default" 
resources.router.routes.category.defaults.controller = "shopping" 
resources.router.routes.category.defaults.action = "category" 
resources.router.routes.category.reqs.id = \w+ 
resources.router.routes.category.reqs.id = \d+ 

; searchroute 
resources.router.routes.search.type = "Zend_Controller_Router_Route" 
resources.router.routes.search.route = "shopping/search/:id/*" 
resources.router.routes.search.defaults.module = "default" 
resources.router.routes.search.defaults.controller = "shopping" 
resources.router.routes.search.defaults.action = "search" 
resources.router.routes.search.reqs.id = \w+ 

itinéraire Catégorie doivent correspondre avec urls comme http://mrc.localhost/shopping/Childrens-Clothing/98 et il fonctionne très bien

route de recherche doit correspondre avec urls comme http://mrc.localhost/shopping/search/dvd+box+set et http://mrc.localhost/shopping/search/123.

route de recherche fonctionne bien pour l'URL qui n'avez pas mot-clé (: id) comme un entier comme http://mrc.localhost/shopping/search/dvd+box+set mais si mot-clé est tout entier, alors routeur de la catégorie a precende comme pour urls http://mrc.localhost/shopping/search/123 et donc une action de catégorie est appelée au lieu d'une action de recherche, car vous voyez: idTwo peut être n'importe quelle chaîne et elle correspond à "search" donc la route de catégorie est utilisée mais je veux que la route de recherche soit utilisée quel que soit le mot-clé.

Répondre

4

Les routes sont réellement trouvées dans l'ordre inverse, donc mettez vos itinéraires plus spécifiques en bas, et plus génériques en haut. Votre commande est correcte.

Lorsque j'ai testé, j'ai trouvé que l'URL de recherche avec l'ID (123) fonctionne bien, mais l'autre ('dvd + box + set') ne fonctionne pas. Vous exigez que: id soit \ w + - le + dans 'dvd + box + set' est ce qui cause l'échec. Si vous voulez que search/* accède à l'action de recherche, abandonnez l'exigence, et faites-en plus avec votre code d'action si vous le devez, sinon les non \ w + ids l'amèneront à l'itinéraire de la catégorie .

Vive

+0

merci pour l'aide. –

1

Essayez de mettre la définition searchroute avant la définition category route dans votre fichier de configuration.

L'idée est que des routes plus spécifiques (searchroute dans votre cas) doivent précéder des routes plus générales (category route).

+0

hey merci pour la réponse, j'ai essayé en mettant la route de recherche plus bas dans le fichier INI, mais toujours le même problème. Je néglige tsomehow itinéraire de recherche et va plutôt pour la catégorie itinéraire. –