CakePHP 中的反向路由基于 Slug 的 URL

Posted

技术标签:

【中文标题】CakePHP 中的反向路由基于 Slug 的 URL【英文标题】:Reverse Routing Slug-Based URL in CakePHP 【发布时间】:2011-07-23 14:30:19 【问题描述】:

(我知道这个网站上还有一些其他的反向路由问题,但我没有太多运气来回答我的特定问题,所以我会问我更具体的问题......)

我正在构建一个站点,其 URL 现在需要基于 slug,即最初的 news/item/1 现在必须具有 URL news/firstnewsitem。对于其他一些控制器,依此类推。我可以很容易地让这些地址工作,甚至可能不会踩到我现有的实用程序操作,例如:

Router::connect('/:controller/:slug',
    array('action'=>'item'),
    array('pass'=>array('slug'), 'slug'=>'[^(index|add|edit|view|delete)]')
);

但是,这些新链接的反向路由似乎是不可能的:Cake 仍在生成诸如 news/item/3 之类的链接。希望基于 slug 的 URL 会自动发生似乎很乐观,但是我可以在我的 html->link 参数中传递任何数组来创建我正在寻找的 :controller/:slug 格式吗?还是我现在必须减少损失并退出反向路由?

【问题讨论】:

【参考方案1】:

这里有一个相当不错的插件来处理基于 slug 的路由: https://github.com/jeremyharris/slugger

如果您使用它,您将能够创建类似这样的链接

$html->link("some item", array(
    'controller'=>'items',
    'action'=>'view',
    'Item'=>$item['id']
));

这将输出指向 /items/view/slug-for-your-item 的链接

【讨论】:

以上是关于CakePHP 中的反向路由基于 Slug 的 URL的主要内容,如果未能解决你的问题,请参考以下文章

CakePHP 反向路由:Html 链接未显示正确的链接

使用 cakePHP 的多种 slug 类型

CakePHP:如何获取与 slug 匹配的行的 ID?

Cakephp路由:使用破折号打破了它

CakePHP 友好的 seo 网址

如何基于 GraphQL API 的 slug 使用 Next.js 进行动态路由?