如何在没有模块的情况下动态设置错误处理程序的布局

Hus*_*Amb 2 php yii2

我是Yii2的新人,

当我开始创建一个网站时,我发现你可以在这样的配置中设置ErrorAction

 'errorHandler' => [
            'errorAction' => 'site/error',

        ],
Run Code Online (Sandbox Code Playgroud)

使用布局/ main.php布局的错误.当访客访问位于"view/site"中的页面时,使用了该布局.但是当用户登录视图页面时,位于"view/band"的不同文件夹中,布局变得完全不同并使用"layout/BandLayout".我知道你可以在控制器中动态更改布局,就像在BandController中一样

public $layout ='BandLayout';
Run Code Online (Sandbox Code Playgroud)

这将改变'view/band'中的整个布局.但是当出现像'404'这样的错误时,布局仍然使用layout/main.php中的布局.我已经做了一些搜索但是在模块中使用init()的解决方案.由于我没有学习模块,如何在控制器中设置错误布局的布局?

谢谢

soj*_*oju 7

你应该改变布局SiteController,你可以使用beforeAction,例如:

public function beforeAction($action)
{
    if (parent::beforeAction($action)) {
        // change layout for error action
        if ($action->id=='error')
             $this->layout ='BandLayout';
        return true;
    } else {
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)