Php yii2url管理两个命名子模式
我的Yii 2.0应用程序中有模块结构,所以我需要调用Php yii2url管理两个命名子模式,php,yii2,yii-url-manager,Php,Yii2,Yii Url Manager,我的Yii 2.0应用程序中有模块结构,所以我需要调用 "module/controller/action" 但是90%的模块和控制器都有相同的名称,例如 "news/news/index" "support/support/index", "profile/profile/update" 看起来不太好,我只想看看个人资料/更新。。。然后在UrlManager中创建以下规则: "<controller:\w+>/<action:\w+>" => "<con
"module/controller/action"
但是90%的模块和控制器都有相同的名称,例如
"news/news/index"
"support/support/index",
"profile/profile/update"
看起来不太好,我只想看看个人资料/更新。。。然后在UrlManager中创建以下规则:
"<controller:\w+>/<action:\w+>" => "<controller>/<controller>/<action>"
这使我得到了一个错误:preg_match:编译失败:两个命名的子模式在偏移量35处具有相同的名称
如何解决这个问题,而不是为每个模块创建不同的规则,我不希望我的配置文件中有几个用于tens模块的规则。这是命名默认控制器(如DefaultController)的好理由。所以规则是/=>/default/我找到了更好的解决方案。PCRE支持允许子模式使用重复名称的修饰符?J。我们所需要的只是将这个修饰符添加到Yii将用于解析url的模式中。不幸的是,我们必须手动添加它,在yii/web/UrlRule更改行中:
$this->_routeRule = '#^' . strtr($this->route, $tr2) . '$#u';
致:
是的,这看起来像是一种解决方案,但我称之为肮脏的解决方案。拥有大量名为DefaultController的类,我认为这不是最佳实践。不管怎样,如果我找不到更好的,我会采纳你的建议。非常感谢。
$this->_routeRule = '#^(?J)' . strtr($this->route, $tr2) . '$#u';