dqst96444 2015-10-08 20:02
浏览 18
已采纳

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

I can't seem to get pretty urls to be generated properly. My frontend config is as follows:

'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>',
    ]
],

The following url array:

['item/view', 'id' => 4, 'slug' => 'shark-chomp-socks']

generates the url http://example.com/item/4?slug=shark-chomp-socks instead of http://example.com/item/4/shark-chomp-socks.

If I manually type in the expected url (http://example.com/item/4/shark-chomp-socks), the url resolves correctly without any errors.

How can I get it to generate the url properly?

  • 写回答

1条回答 默认 最新

  • douran9707 2015-10-08 20:33
    关注

    The rules in my common config were causing the issue. I removed the urlManager entry in common/config/main.php and the urls were created properly. I had this in 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>',
        ]
    ],
    

    Since, the frontend/config/main.php is merged into common/config/main.php in my frontend/web/index.php, the rules in frontend were appended to those in common and duplicates removed resulting in the following order:

    '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: Remove any rules from any config file that is loaded before the one in which your custom rules are.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)