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

时间:2014-12-19 21:00:31

标签: php yii2

我是Yii2的新人,

当我开始创建网站时,我发现您可以在此配置中设置ErrorAction

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

        ],

使用layout / main.php布局的错误。当访客访问位于' view / site'中的页面时,使用该布局。但是当用户登录视图页面时,会找到不同的文件夹,即“查看/频段”。布局变得完全不同,使用' layout / BandLayout'。我知道你可以在控制器中动态更改布局,就像在BandController

中一样
public $layout ='BandLayout';

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

谢谢

1 个答案:

答案 0 :(得分: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;
    }
}