Приоритет Zend Router - PullRequest
       18

Приоритет Zend Router

1 голос
/ 21 сентября 2010

У меня есть два маршрута

; 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+

Маршрут категории должен соответствовать URL-адресам, таким как http://mrc.localhost/shopping/Childrens-Clothing/98, и он работает нормально

Маршрут поиска должен совпадать с URL-адресами, такими как http://mrc.localhost/shopping/search/dvd+box+set и http://mrc.localhost/shopping/search/123.

Маршрут поиска работает нормально для URL, для которого ключевое слово (: id) не имеет целочисленного значения, такого как http://mrc.localhost/shopping/search/dvd+box+set, но если ключевое слово является просто целым числом, тогда маршрутизатор категории получал прецеденткак для URL http://mrc.localhost/shopping/search/123 и, следовательно, вместо действия поиска вызывается действие категории, потому что вы видите: idTwo может быть любой строкой и соответствует «поиску», поэтому используется маршрут категории, но я хочу использовать маршрут поиска независимо от того, чтоэто ключевое слово.

Ответы [ 2 ]

5 голосов
/ 30 сентября 2010

Маршруты на самом деле совпадают в обратном порядке, поэтому поместите более конкретные маршруты снизу, а более общие - сверху. Ваш заказ в порядке.

При тестировании я обнаружил, что поисковый URL с идентификатором (123) работает нормально, но другой ('dvd + box + set') не работает. Вы запрашиваете: id должен быть \ w + - + в 'dvd + box + set' это то, что вызывает его сбой.

Если вы хотите, чтобы search / * переходил к поисковому действию, отбросьте требование и сделайте что-нибудь еще с ним в коде вашего контроллера действий, если это необходимо, в противном случае не \ w + ids заставит его перейти к маршруту категории.

Приветствия

1 голос
/ 21 сентября 2010

Попробуйте поместить searchroute определение перед category route определением в вашем конфигурационном файле.

Идея заключается в том, что более конкретные маршруты (searchroute в вашем случае) должны предшествовать более общим маршрутам (category route).

...