我的Yii 2.0应用程序中有模块结构,因此我需要调用类似
"module/controller/action"
但是90%的模块和控制器具有相同的名称,例如看起来
"news/news/index"
"support/support/index",
"profile/profile/update"
看起来不好,我只想查看“配置文件/更新” ...然后在UrlManager中创建以下规则:
"<controller:\w+>/<action:\w+>" => "<controller>/<controller>/<action>"
这使我得到以下错误:“ preg_match():编译失败:两个命名的子模式在偏移量35处具有相同的名称”
如何解决此问题,而不是为每个模块创建不同的规则,我不希望我的配置文件对数十个模块有多个规则。
我找到了更好的解决方案。PCRE支持修饰符“?J”,该修饰符允许子模式使用重复的名称。我们所需要做的就是将这个修饰符添加到Yii将用于解析url的模式中。不幸的是,我们必须在yii / web / UrlRule更改行中手动添加它:
$this->_routeRule = '#^' . strtr($this->route, $tr2) . '$#u';
到:
$this->_routeRule = '#^(?J)' . strtr($this->route, $tr2) . '$#u';
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句