Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

setting error action layout in yii2 not working

For setting error action I added this code in my controller

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

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

But its not working.Error layout is displaying in default layout

like image 524
Jackhad Avatar asked Oct 28 '25 04:10

Jackhad


2 Answers

You could use Yii2 official yii\web\ErrorAction to handle error in controller:

/**
 * {@inheritdoc}
 */
public function actions()
{
    return [
        'error' => [
            'class' => 'yii\web\ErrorAction',
            'layout' => 'login',
        ],
    ];
}

Note that we could set the layout property for changing layout for error view.

https://www.yiiframework.com/doc/api/2.0/yii-web-erroraction

like image 79
Nick Tsai Avatar answered Oct 31 '25 11:10

Nick Tsai


Add to your config:

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

Create controller if not exists: SiteController.php with content:

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]);
        }
    }
}

And simplest view site/error.php:

<?php 
    use yii\helpers\Html; 
?>
<div class="site-error">
        <?= Html::encode($exception->getMessage()) ?>
</div>

Tested on Yii2. More information in documentation http://www.yiiframework.com/doc-2.0/guide-runtime-handling-errors.html#using-error-handler

like image 22
Yury Avatar answered Oct 31 '25 11:10

Yury