如何使用Yii2 GroupUrlRule()类



我想将路径分组在一个公共路径下。我在Yii2文档中发现,这可以通过GroupUrlRule()类实现。我不明白该把它放在哪里。我试图将其作为confing/web.php中的urlManager的规则,但没有发生任何事情。

假设您有某个模块。你的config/web.php文件可能像这样:

'components' => [
    'urlManager' => [
        'class' => 'yiiwebUrlManager',
        'showScriptName' => false,
        'enablePrettyUrl' => true,
        'rules' => [
            [
                'class' => 'yiiwebGroupUrlRule',
                'prefix' => 'module',
                'rules' => [
                    '/' => 'controller/index',
                    'create' => 'controller/create',
                    'edit' => 'controller/edit',
                    'delete' => 'controller/delete',
                ],
            ],
        ],
    ],
]

现在,通过URL hostname.com/module将被称为'module/controller/index'

您可以在Bootstrap文件中这样做。例子:

项目/Bootstrap.php

namespace app;
use yiibaseBootstrapInterface;
use yiiwebGroupUrlRule;
class Bootstrap implements BootstrapInterface
{
    public $urlRules = [
        'prefix' => 'admin',
        'rules' => [
            'login' => 'user/login',
            'logout' => 'user/logout',
            'dashboard' => 'default/dashboard',
        ],
    ];
    public function bootstrap($app)
    {
        $app->get('urlManager')->rules[] = new GroupUrlRule($this->urlRules);
    }
}

项目/config/web.php

return [
    // ...
    'bootstrap' => [
        'log',
        'appBootstrap',
    ],
    // ...
]

注:引导文件对于模块化应用结构非常有用。在模块的文件夹中配置模块的路由要清晰得多。为此,只需在其文件夹中为每个模块创建Bootstrap文件。但是不要忘记更新应用程序配置文件的bootstrap部分。

最新更新