具有多个参数的网址未正确创建

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: 从任何配置文件中删除任何规则,该文件在您的自定义规则所在的配置文件之前加载。