我需要在网址中包含语言参数和slug的路由。
即http:// localhost / demo / eng / home
这里“eng”是语言名称,“home”是slug名称。
我在route.php中完成了以下代码
Router::connect('/:language/:action/*',array('controller' => 'homes'),array('language' => '[a-z]{3}')); Router::connect('/:language/:slug/*', array('controller' => 'homes', 'action' => 'view'), array('language' => '[a-z]{3}','slug' => '[a-zA-Z0-9_-]+')); Router::connect('/:slug',array('controller' => 'homes','action' => 'view'),array('slug' => '[a-zA-Z0-9_-]+'));也在视野中
I need route containing Both language parameter and slug in the url.
i.e http://localhost/demo/eng/home
Here "eng" is language name and "home" is slug name.
I have done following code in route.php
Router::connect('/:language/:action/*',array('controller' => 'homes'),array('language' => '[a-z]{3}')); Router::connect('/:language/:slug/*', array('controller' => 'homes', 'action' => 'view'), array('language' => '[a-z]{3}','slug' => '[a-zA-Z0-9_-]+')); Router::connect('/:slug',array('controller' => 'homes','action' => 'view'),array('slug' => '[a-zA-Z0-9_-]+'));Also in view
最满意答案
你有相互冲突的路线。
我猜您正在尝试将以下URL数组传递给HtmlHelper::link()或HtmlHelper::url() :
[ 'controller' => 'homes', 'action' => 'view', 'language' => 'eng', 'slug' => 'press-release', ]但是这个数组不仅匹配/:language/:slug/*而且还匹配/:language/:action/* 。 因为包含language和action ,并且slug匹配*作为命名参数。 和/:language/:action/*出现在routes.php中的/:language/:slug/*之前。 如果定义冲突的路由,则第一个定义的路由具有更高的优先级。 因此,您将获得URL /eng/view/slug:press-release 。
总之, /:language/:action/*应该被删除或至少在/:language:/:slug/*之后定义。
You have conflicted routes.
I am guessing that you are trying to pass a URL array like the following to HtmlHelper::link() or HtmlHelper::url():
[ 'controller' => 'homes', 'action' => 'view', 'language' => 'eng', 'slug' => 'press-release', ]But this array matches not only /:language/:slug/* but also /:language/:action/*. Because both language and action are contained, and slug matches * as a named parameter. And /:language/:action/* appears before /:language/:slug/* in your routes.php. If you define conflicted routes, the first defined route has higher priority. Thus, you get the URL /eng/view/slug:press-release.
In conclusion, /:language/:action/* should be removed or should be defined at least after /:language:/:slug/*.
更多推荐
发布评论