首页 > 解决方案 > Yii2 模块或控制器路由

问题描述

我尝试对模块和控制器使用路由

'<controller>'=>'<controller>/index',
                '<controller>/<id:\d+>'=>'<controller>/view',
                '<controller>/<action>'=>'<controller>/<action>',
                '<module>' => '<module>/default/index',
                '<module>/<id:\d+>' => '<module>/default/view',
                '<module>/edit/<id:\d+>' => '<module>/default/edit',
                '<module>/delete/<id:\d+>' => '<module>/default/delete',
                '<module>/<action>' => '<module>/default/<action>',
                '<module>/<controller>' => '<module>/<controller>/index',
                '<module>/<controller>/edit/<id:\d+>' => '<module>/<controller>/edit',
                '<module>/<controller>/delete/<id:\d+>' => '<module>/<controller>/delete',
                '<module>/<controller>/<id:\d+>' => '<module>/<controller>/view',
                '<module>/<controller>/<action>' => '<module>/<controller>/<action>',

但是由于某种原因,如果第一个匹配规则不起作用,那么其余的都不会被检查,你会得到一个 404 错误。例如,如果没有找到控制器,则得到404,并且检查没有到达模块。

网址管理器配置

  'urlManager' => [
        'enablePrettyUrl' => true,
        'showScriptName' => false,
        'rules' => [
                'store/upload'=>'store/upload',
                'stores'=>'store/index',
            //    'post/<id:\d+>'=>'post/view',
                'comment/send'=>'comment/send',
                ['class' => 'yii\rest\UrlRule', 'controller' => 'Api',  'prefix' => 'api'],
                'api/<id:\d+>'=>'api/view',
                [
                        'pattern' => 'users',
                        'route' => 'users/index',
                        'suffix' => '/',
                        'normalizer' => false, // отключаем нормализатор для этого правила
                ],
           //     '<controller>'=>'<controller>/index',
   //             '<controller>/<id:\d+>'=>'<controller>/view',
    //            '<controller>/<action>'=>'<controller>/<action>',
                '<module>' => '<module>/default/index',
                '<module>/<id:\d+>' => '<module>/default/view',
                '<module>/edit/<id:\d+>' => '<module>/default/edit',
                '<module>/delete/<id:\d+>' => '<module>/default/delete',
                '<module>/<action>' => '<module>/default/<action>',
                '<module>/<controller>' => '<module>/<controller>/index',
                '<module>/<controller>/edit/<id:\d+>' => '<module>/<controller>/edit',
                '<module>/<controller>/delete/<id:\d+>' => '<module>/<controller>/delete',
                '<module>/<controller>/<id:\d+>' => '<module>/<controller>/view',
                '<module>/<controller>/<action>' => '<module>/<controller>/<action>',


        ],
    ],

请求 URL http://yii2/post 到 PostController/actionIndex()

标签: yii2yii2-basic-app

解决方案


我修复了路由,它起作用了。首先检查控制器,然后检查模块。

 '<controller:\w+>'=>'<controller>/index',
                '<controller:\w+>/<id:\d+>'=>'<controller>/view',
                '<controller:\w+>/<action>'=>'<controller>/<action>',
                '<module:\w+>' => '<module>/default/index',
                '<module:\w+>/<id:\d+>' => '<module>/default/view',
                '<module:\w+>/edit/<id:\d+>' => '<module>/default/edit',
                '<module:\w+>/delete/<id:\d+>' => '<module>/default/delete',
                '<module:\w+>/<action:\w+>' => '<module>/default/<action>',
                '<module:\w+>/<controller:\w+>' => '<module>/<controller>/index',
                '<module:\w+>/<controller:\w+>/edit/<id:\d+>' => '<module>/<controller>/edit',
                '<module:\w+>/<controller:\w+>/delete/<id:\d+>' => '<module>/<controller>/delete',
                '<module:\w+>/<controller:\w+>/<id:\d+>' => '<module>/<controller>/view',
                '<module:\w+>/<controller:\w+>/<action>' => '<module>/<controller>/<action>',

推荐阅读