Error handling YII2显示在';布局';它是在哪里提出的?

Error handling YII2显示在';布局';它是在哪里提出的?,error-handling,yii2,Error Handling,Yii2,在多层应用程序中,通常有单独的布局。 假设有“管理员”、“论坛”和“站点”层或多个模块,每个模块在视图中都有自己的布局 YII错误处理最糟糕的一点是,无法根据应用层或模块更改错误处理程序的布局文件 在YIIs全局配置文件中,我们启用errorHandler模块,如下所示: 'errorHandler' => [ 'errorAction' => 'site/error', ], 我们为整个应用程序全局定义了一个错误处理程序操作,并且没有在应用

在多层应用程序中,通常有单独的布局。 假设有“管理员”、“论坛”和“站点”层或多个模块,每个模块在视图中都有自己的布局

YII错误处理最糟糕的一点是,无法根据应用层或模块更改错误处理程序的
布局
文件

在YIIs全局配置文件中,我们启用
errorHandler
模块,如下所示:

'errorHandler' => [
            'errorAction' => 'site/error',
        ],
我们为整个应用程序全局定义了一个错误处理程序操作,并且没有在应用程序运行时更改它的选项。即使在该errorAction内部,也没有选项更改
布局
文件或其范围之外的视图文件

什么样的解决方案是可能的,并且足够简单,可以将每个错误显示在提出错误的位置的
布局中

您可以在任何控制器中使用以下命令指定errorAction:

public function actionError(){
    //your code is here
}

public function actions(){
return [
    'error' => ['class' => 'yournamespace\YourAction'],
];
}

Yii::$app->errorHandler->errorView='views/error.php'
亲爱的穆罕默德,这会更改呈现错误消息的视图文件,而不是与$This->layout='yourNewLayout'关联的布局;请试试这个。一个问题:为什么需要错误页面模块/层?@muhammad shahzad无法使其运行。根据YII docs Controller::$layout是:“应用于此控制器视图的布局的名称。”而不是布局路径。Yii2从不在控制器内触发
actionError()
。您可以测试它,我已经测试过它,并且YII总是触发您在配置文件中指定的
actionError()
public function actions(){return['error'=>['class'=>'yournamespace\yournaction'],];}
您可以,我正在使用它。它可以工作您如何在操作中切换布局?Yii始终在配置中定义的布局中呈现错误,无论传递给
errorHandler
的是什么
errorAction
<代码>错误操作
仅格式化错误消息。