Yii2-Url管理器-特定规则失败



我有以下url:

http://example.com/user/login

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

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

如果我创建网址:

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

它应该创建与上面相同的url,但它创建了:

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

但如果我把规则改为:

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

它还可以,有什么想法吗?我想是出于某种原因:

  1. 它正在将空段塞传递给或
  2. 它是一个无效值

有什么想法吗?

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

路由模式和命名参数不应使用相同的名称。您应该使用不同的名称:

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

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

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

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

最新更新