Yii2-网址管理器-特定规则失败

时间:2018-07-22 04:02:05

标签: regex yii2 yii2-basic-app yii2-urlmanager

我有以下网址:

http://example.com/user/login

如果我在浏览器中输入网址,则它符合规则:

'<module:user>/<slug:[\w\-]+>' => '<module>/<slug>'

如果我创建网址:

Yii::$app->urlManager->createAbsoluteUrl(["user/index", "slug" => "login"]);

它应该创建与上面相同的网址,但是会创建:

http://example.com/user/index?slug=login

但是如果我将规则更改为:

'<module:user>/<slug:[\w\-]+>' => '<module>/index'

一切正常,为什么有任何想法?我猜出于某种原因:

  1. 它会将子弹空传递给或
  2. 这是无效值。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

这是因为slug是路由模式的一部分:'<module>/<slug>'。因此,<slug:[\w\-]+>不会被视为命名的GET参数,而是被视为路由的一部分。这意味着URL /user/something将指向路由user/something,而没有任何GET参数。

请勿将相同的名称用于路由模式和已命名的参数。您应该使用其他名称:

'<module:user>/<action:[\w\-]+>/<slug:[\w\-]+>' => '<module>/<action>'

或对指定规则进行硬编码操作(如您在第二个示例中所做的那样):

'<module:user>/<slug:[\w\-]+>' => '<module>/index'

请注意,这也将匹配标准操作,例如user/view