这是因为
我有以下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'
它还可以,有什么想法吗?我想是出于某种原因:
- 它正在将空段塞传递给或
- 它是一个无效值
有什么想法吗?
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
。