我有以下网址:
如果我在浏览器中输入网址,则它符合规则:
'<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'
一切正常,为什么有任何想法?我猜出于某种原因:
有什么想法吗?
答案 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
。