在yii2中设置错误操作布局不起作用

时间:2016-06-08 08:12:05

标签: error-handling yii2 yii2-basic-app

为了设置错误操作,我在控制器中添加了此代码

public function beforeAction($action) {
    if ($action->id == 'error')
        $this->layout = 'iframe-main.php';

    $this->enableCsrfValidation = false;
    return parent::beforeAction($action);
}

但它没有工作。错误布局以默认布局显示

4 个答案:

答案 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
    }
}