具有多个参数的网址未正确创建
Urls with multiple parameters not being created properly
我似乎无法正确生成漂亮的 urls。我的前端配置如下:
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
'item/<id:\d+>/<slug>' => 'item/view',
'category/<id:\d+>/<slug>' => 'category/view',
'<controller:\w+>/<id:\d+>' => '<controller>/view',
'<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
'<controller:\w+>/<action:\w+>' => '<controller>/<action>',
]
],
以下url数组:
['item/view', 'id' => 4, 'slug' => 'shark-chomp-socks']
生成 url http://example.com/item/4?slug=shark-chomp-socks
而不是 http://example.com/item/4/shark-chomp-socks
。
如果我手动输入预期的 url (http://example.com/item/4/shark-chomp-socks
),url 会正确解析,没有任何错误。
如何让它正确生成 url?
我的常用配置中的规则导致了这个问题。我删除了 common/config/main.php
中的 urlManager
条目,并且正确创建了 url。我在 common/config/main.php
:
'urlManager' => [
'enablePrettyUrl' => true,
'rules' => [
'<controller:\w+>/<id:\d+>' => '<controller>/view',
'<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
'<controller:\w+>/<action:\w+>' => '<controller>/<action>',
]
],
由于 frontend/config/main.php
在我的 frontend/web/index.php
中合并到 common/config/main.php
,因此 frontend
中的规则附加到 common
中的规则并删除了重复项产生以下顺序:
'rules' => [
'<controller:\w+>/<id:\d+>' => '<controller>/view',
'<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
'<controller:\w+>/<action:\w+>' => '<controller>/<action>',
'item/<id:\d+>/<slug>' => 'item/view',
'category/<id:\d+>/<slug>' => 'category/view',
]
TL;DR: 从任何配置文件中删除任何规则,该文件在您的自定义规则所在的配置文件之前加载。
我似乎无法正确生成漂亮的 urls。我的前端配置如下:
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
'item/<id:\d+>/<slug>' => 'item/view',
'category/<id:\d+>/<slug>' => 'category/view',
'<controller:\w+>/<id:\d+>' => '<controller>/view',
'<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
'<controller:\w+>/<action:\w+>' => '<controller>/<action>',
]
],
以下url数组:
['item/view', 'id' => 4, 'slug' => 'shark-chomp-socks']
生成 url http://example.com/item/4?slug=shark-chomp-socks
而不是 http://example.com/item/4/shark-chomp-socks
。
如果我手动输入预期的 url (http://example.com/item/4/shark-chomp-socks
),url 会正确解析,没有任何错误。
如何让它正确生成 url?
我的常用配置中的规则导致了这个问题。我删除了 common/config/main.php
中的 urlManager
条目,并且正确创建了 url。我在 common/config/main.php
:
'urlManager' => [
'enablePrettyUrl' => true,
'rules' => [
'<controller:\w+>/<id:\d+>' => '<controller>/view',
'<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
'<controller:\w+>/<action:\w+>' => '<controller>/<action>',
]
],
由于 frontend/config/main.php
在我的 frontend/web/index.php
中合并到 common/config/main.php
,因此 frontend
中的规则附加到 common
中的规则并删除了重复项产生以下顺序:
'rules' => [
'<controller:\w+>/<id:\d+>' => '<controller>/view',
'<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
'<controller:\w+>/<action:\w+>' => '<controller>/<action>',
'item/<id:\d+>/<slug>' => 'item/view',
'category/<id:\d+>/<slug>' => 'category/view',
]
TL;DR: 从任何配置文件中删除任何规则,该文件在您的自定义规则所在的配置文件之前加载。