2016-05-27 72 views
0

我试图让Yii中2某些URL规则,所以我可以从控制器这样的访问操作:urlManager规则不工作的模块Yii2

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>', 

我已经尝试过用midend更换<module:\w+>

+0

为什么''而不是''? – soju

+0

@soju好吧,我从行动中复制了并用id替换。猜'\ d'更有意义。 –

回答

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(a ssuming你有一个默认的控制器)
  • www.example.com/module/controller
  • www.example.com/module/controller/action
  • www.example.com/module/controller/action/1
+0

谢谢。之后我意识到我的ID也是字符,所以我用'\ w'替换了'\ d'。工作完美。 –