【问题标题】:Yii2 - Remove default module controller from URLYii2 - 从 URL 中删除默认模块控制器
【发布时间】:2020-12-09 03:19:03
【问题描述】:

我的urlManager中有以下规则:

<?php

    $uuidV4Pattern = '[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}';
    
    $config = [
        ...
        'components' => [
            'urlManager' => [
                'enablePrettyUrl' => true,
                'showScriptName' => false,
                'rules' => [
                    '/' => 'site/index',
                    '<action:[a-zA-Z_]+>' => 'site/<action>',

                    '<controller:\w+>/<id:' . $uuidV4Pattern. '>'=>'<controller>/view',
                    '<controller:\w+>/<id:\d+>'=>'<controller>/view',
                    '<controller:\w+>/<action:[a-zA-Z_]+>/<id:' . $uuidV4Pattern. '>'=>'<controller>/<action>',
                    '<controller:\w+>/<action:[a-zA-Z_]+>/<id:\d+>'=>'<controller>/<action>',
                    '<controller:\w+>/<action:[a-zA-Z_]+>'=>'<controller>/<action>',

                    '<module:\w+>/<controller:\w+>/<id:' . $uuidV4Pattern. '>'=>'<module>/<controller>/view',
                    '<module:\w+>/<controller:\w+>/<id:\d+>'=>'<module>/<controller>/view',
                    '<module:\w+>/<controller:\w+>/<action:[a-zA-Z_]+>/<id:' . $uuidV4Pattern. '>'=>'<module>/<controller>/<action>',
                    '<module:\w+>/<controller:\w+>/<action:[a-zA-Z_]+>/<id:\d+>'=>'<module>/<controller>/<action>',
                    '<module:\w+>/<controller:\w+>/<action:[a-zA-Z_]+>'=>'<module>/<controller>/<action>',

                ]
            ]
        ],
        ...
    ];

但我希望在访问我的模块的操作时按以下方式进行操作:

https://example.com/mymodule
https://example.com/mymodule/action
https://example.com/mymodule/controller/action

代替:

https://example.com/mymodule/default/index
https://example.com/mymodule/default/action
https://example.com/mymodule/controller/action

我将这两条规则插入如下:

'rules' => [
    '/' => 'site/index',
    '<action:[a-zA-Z_]+>' => 'site/<action>',

    '<controller:\w+>/<id:' . $uuidV4Pattern. '>'=>'<controller>/view',
    '<controller:\w+>/<id:\d+>'=>'<controller>/view',
    '<controller:\w+>/<action:[a-zA-Z_]+>/<id:' . $uuidV4Pattern. '>'=>'<controller>/<action>',
    '<controller:\w+>/<action:[a-zA-Z_]+>/<id:\d+>'=>'<controller>/<action>',
    '<controller:\w+>/<action:[a-zA-Z_]+>'=>'<controller>/<action>',
    
    // New rules
    '<module:\w+>/<action:\w+>/<id:(.*?)>' => '<module>/default/<action>/<id>',
    '<module:\w+>/<action:\w+>' => '<module>/default/<action>',
    
    '<module:\w+>/<controller:\w+>/<id:' . $uuidV4Pattern. '>'=>'<module>/<controller>/view',
    '<module:\w+>/<controller:\w+>/<id:\d+>'=>'<module>/<controller>/view',
    '<module:\w+>/<controller:\w+>/<action:[a-zA-Z_]+>/<id:' . $uuidV4Pattern. '>'=>'<module>/<controller>/<action>',
    '<module:\w+>/<controller:\w+>/<action:[a-zA-Z_]+>/<id:\d+>'=>'<module>/<controller>/<action>',
    '<module:\w+>/<controller:\w+>/<action:[a-zA-Z_]+>'=>'<module>/<controller>/<action>',

],

但不工作。我不知道我错过了什么,我会很感激他们给了我一些启发。

【问题讨论】:

    标签: php regex yii2 yii2-urlmanager


    【解决方案1】:

    好的,我设法(以一种简单的方式)解决这个问题的方法是编辑我的规则如下:

    'rules' => [    
            '<module:\w+>/<action:(dashboard)>' => '<module>/default/<action>',
            
            '<controller:\w+>/<action:[a-zA-Z_]+>/<id:' . $uuidV4Pattern. '>'=>'<controller>/<action>',
            '<controller:\w+>/<action:[a-zA-Z_]+>/<id:\d+>'=>'<controller>/<action>',
            '<controller:\w+>/<action:[a-zA-Z_]+>'=>'<controller>/<action>',
            
            '<module:\w+>/<controller:\w+>/<action:[a-zA-Z_]+>/<id:' . $uuidV4Pattern. '>' => '<module>/<controller>/<action>',
            '<module:\w+>/<controller:\w+>/<action:[a-zA-Z_]+>/<id:\d+>' => '<module>/<controller>/<action>',
            '<module:\w+>/<controller:\w+>/<action:[a-zA-Z_]+>' => '<module>/<controller>/<action>',
    
    ]
    

    我不得不强制指定动作的名称,因为它们似乎(我不确定)与模块中其他控制器的名称冲突。

    我不满意,因为我想用模式和正则表达式解决所有问题。

    注意:我没有将其标记为正确答案,希望其他人可以提出更“优雅”的解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-14
      • 1970-01-01
      • 2015-06-17
      • 1970-01-01
      • 2013-12-12
      • 2014-10-29
      • 2015-10-29
      • 1970-01-01
      相关资源
      最近更新 更多