CakePHP使用slug和语言进行路由(CakePHP Routing with slug and language)

编程入门 行业动态 更新时间:2024-10-24 16:27:45
CakePHP使用slug和语言进行路由(CakePHP Routing with slug and language)

我需要在网址中包含语言参数和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/*.

更多推荐

本文发布于:2023-08-07 19:30:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1465955.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:路由   语言   slug   CakePHP   Routing

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!