我一直在环顾四周但却找不到我需要的东西。基本上,我有一些只有DefaultController的小模块和一些带有多个控制器的大模块。 我对小模块的规则工作正常,但大模块的规则不会。这是我的规则:
'<module:\w+>/<action:\w+>' => '<module>/default/<action>',
'<module:\w+>/<action:\w+>/<id:\d+>' => '<module>/default/<action>',
'<module:\w+>/<controller:\w+>' => '<module>/<controller>/index',
'<module:\w+>/<controller:\w+>/<action:\w+>' => '<module>/<controller>/<action>'
前两个规则正常,允许我访问:
http://host/news/create
以及news/default/create
的路由。
最后两个应该执行以下操作:
http://host/posts/category
应路由到posts/category/index
和
http://host/posts/category/create
应路由到posts/category/create
可悲的是,它们似乎不起作用。有什么建议吗?
答案 0 :(得分:5)
看起来第一条规则将捕获任何可能与第三条规则相匹配的请求。
在代表正则表达式的术语中考虑它:w+/w+
:作为Yii中路由的通用规则,更多的规范性规则应该在顶部而不是更通用,所有规则应该在底部
现在,获得所需内容的最佳方法是按照以下方式执行以下操作:
'<module:news>/<action:\w+>' => '<module>/default/<action>',
'<module:news>/<action:\w+>/<id:\d+>' => '<module>/default/<action>',
'<module:posts>/<controller:\w+>' => '<module>/<controller>/index',
'<module:posts>/<controller:\w+>/<action:\w+>' => '<module>/<controller>/<action>'
通过这种方式,您可以清晰,直接地明确表达每个模块的路线,这也将为您提供长期的帮助。