为了设置错误操作,我在控制器中添加了此代码
public function beforeAction($action) {
if ($action->id == 'error')
$this->layout = 'iframe-main.php';
$this->enableCsrfValidation = false;
return parent::beforeAction($action);
}
但它没有工作。错误布局以默认布局显示
答案 0 :(得分:3)
试试这个:
public function beforeAction($action) {
if (parent::beforeAction($action)) {
// change layout for error action
if ($action->id=='error') $this->layout ='iframe-main';
return true;
} else {
return false;
}
}
答案 1 :(得分:2)
添加到您的配置:
'components' => ['errorHandler' => [
'errorAction' => 'site/error',
],
创建控制器(如果不存在):SiteController.php,内容为:
namespace app\controllers;
use Yii;
use yii\web\Controller;
class SiteController extends Controller
{
public function actionError()
{
$exception = Yii::$app->errorHandler->exception;
if ($exception !== null) {
$this->layout = 'yourNewLayout';
return $this->render('error', ['exception' => $exception]);
}
}
}
最简单的查看网站/ error.php:
<?php
use yii\helpers\Html;
?>
<div class="site-error">
<?= Html::encode($exception->getMessage()) ?>
</div>
在Yii2上测试过。文档http://www.yiiframework.com/doc-2.0/guide-runtime-handling-errors.html#using-error-handler
中的更多信息答案 2 :(得分:1)
您可以使用Yii2官方yii\web\ErrorAction
来处理控制器中的错误:
/**
* {@inheritdoc}
*/
public function actions()
{
return [
'error' => [
'class' => 'yii\web\ErrorAction',
'layout' => 'login',
],
];
}
请注意,我们可以设置layout
属性来更改错误视图的布局。
https://www.yiiframework.com/doc/api/2.0/yii-web-erroraction
答案 3 :(得分:0)
在SiteController的actionError()中添加默认布局名称
class SiteController extends Controller
{
public function actionError()
{
$this->layout='defaultLayoutName';
//rest of the code goes here
}
}