首页 > 解决方案 > Yii2 url 规则使用 slug 用于多个控制器,例如 domain.com/slug

问题描述

我想为以下内容设置 url 规则:www.domain.com/slug in url for multiple controllers。我有一个模型“内容”,并且在“内容”模型中有一个名为内容类型的列。例如。content_type = 1 表示比赛,content_type = 2 表示帖子,content_type = 3 表示产品等。我为每个 content_type、contestController、postController、productController 创建了一个控制器。

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

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

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

标签: yii2url-routing

解决方案


不是直接回答,但是,您是否考虑过另一种方法?

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

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

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

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

    • 您应该知道,在放置指向该页面的链接时,使用哪种类型
  3. 按类型标志拆分路由器(未测试)

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

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

除此之外,我看不出它是如何工作的。


推荐阅读