【问题标题】:urlManager rules not working on modules Yii2urlManager 规则不适用于模块 Yii2
【发布时间】:2016-05-27 12:24:16
【问题描述】:

我正在尝试在 Yii 2 中创建一些 url 规则,这样我就可以从控制器访问一个动作,如下所示:

controller/action/1 -> controller/action (with a parameter)

我尝试了一些规则,但它们不适用于我的模块(www.example.com/midend、www.example.com/backend)。

所以,如果我想访问www.example.com/controller/action/1,它可以正常工作,但如果我想访问www.example.com/midend/controller/action/1,它会返回 404。

这些是模块的规则:

'<module:\w+>/<controller:\w+>/<action:\w+>/<id:\w+>' => '<module>/<controller>/<action>',
'<module:\w+>/<controller:\w+>/<action:\w+>' => '<module>/<controller>/<action>',
'<module:\w+>/<controller:\w+>/<id:\w+>' => '<module>/<controller>',

这些是没有模块的规则:

'<controller:\w+>/<action:\w+>/<id:\w+>' => '<controller>/<action>',
'<controller:\w+>/<action:\w+>' => '<controller>/<action>',
'<controller:\w+>/<id:\w+>' => '<controller>',

我已经尝试将&lt;module:\w+&gt; 替换为midend。

【问题讨论】:

  • 为什么是&lt;id:\w+&gt; 而不是&lt;id:\d+&gt;?
  • @soju 好吧,我从动作中复制了 on 并替换为 id。猜猜\d更有意义。

标签: yii2 yii-url-manager


【解决方案1】:

假设你的 id 是整数,你应该简单地用这个替换你的规则:

'<controller>/<action>/<id:\d+>' => '<controller>/<action>',

它适用于:

  • www.example.com/controller
  • www.example.com/controller/action
  • www.example.com/controller/action/1
  • www.example.com/module(假设您有一个默认控制器)
  • www.example.com/module/controller
  • www.example.com/module/controller/action
  • www.example.com/module/controller/action/1

【讨论】:

  • 谢谢。之后我意识到我的 id 也是字符,所以我用\w 替换了\d。工作完美。
猜你喜欢
  • 1970-01-01
  • 2017-08-26
  • 2017-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多