1

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

如何解决这个问题,而不是为每个模块创建不同的规则,我不希望我的配置文件有几十个模块的多个规则。

4

2 回答 2

1

我找到了更好的解决方案。PCRE 支持允许子模式重复名称的修饰符“?J”。我们所需要的只是将这个修饰符添加到 Yii 将用于解析 url 的模式中。不幸的是,我们必须手动添加它,在 yii/web/UrlRule 更改行:

$this->_routeRule = '#^' . strtr($this->route, $tr2) . '$#u';

至:

$this->_routeRule = '#^(?J)' . strtr($this->route, $tr2) . '$#u';
于 2014-08-29T07:42:48.073 回答
-1

这是命名默认控制器(如 DefaultController)的充分理由。所以规则是"<module:\w+>/<action:\w+>" => "<module>/default/<action>"

于 2014-08-28T07:38:47.077 回答