Yii2 url 规则使用 slug 用于多个控制器,例如域。com/slug

Yii2 url rules using slug for multiple controllers eg domain.com/slug

我想为多个控制器设置 url 规则,例如:www.domain.com/slug in url。我有一个模型 "Content" 并且在 "Content" 模型中有一个名为内容类型的列。例如。 content_type = 1 表示竞赛,content_type = 2 表示 post,content_type = 3 表示产品等。我为每个 content_type 创建了一个控制器,比赛控制器,post控制器,产品控制器。

我想知道是否有办法让 urls 为几个不同的控制器保持以下格式:

'<slug:.*?>'=>'contest/view', // content type contest - contestController
'<slug:.*?>'=>'post/view', // content type post - postController
'<slug:.*?>'=>'product/view', // content type product - productController

根据 yii 文档,它仅适用于上述一条规则。

不是直接的答案,但是,您是否考虑过其他方法?

  1. 将所有内容发送到 1 个控制器

    '<slug:.*?>'=>'post/view',

    • 在前端部分用户将不知道实际使用的是哪个控制器,但是您可以通过 slug 找到模型后检测类型。
  2. 按控制器拆分路由器

    'post/<slug:.*?>'=>'post/view',

    • 你应该知道,将 link 放置到该页面时,使用的是哪种类型
  3. 按类型标志拆分路由器(未测试)

    '<slug:[\w][\-\w]*?>/post'=>'post/view',

    '<slug:[\w][\-\w]*?>/product'=>'product/view',

除此之外,我不知道它是如何工作的。