Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php yii2url管理两个命名子模式_Php_Yii2_Yii Url Manager - Fatal编程技术网

Php yii2url管理两个命名子模式

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

我的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处具有相同的名称


如何解决这个问题,而不是为每个模块创建不同的规则,我不希望我的配置文件中有几个用于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';