Включаем/выключаем сообщения об ошибках

В Yii2 обработчик ошибок по умолчанию включен. Отключить его можно следующим образом, откройте файл @app/web/index.php и добавьте следующий код:

// Yii2 отключить error handler
define('YII_ENABLE_ERROR_HANDLER', false);

Настройки по умолчанию

По умолчанию в Yii2 уже есть готовый к использованию обработчик ошибок.

Обработчик ошибок в Yii2 называется errorHandler. Его настройки находятся в:

  • для Yii basic - yourProject/config/web.php
  • Yii advanced - yourProject/common|backend|frontend/config/main.php

Например, по умолчанию обработчик ошибок использует действие site/error для вывода ошибок и исключений:

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

В таком случае нет необходимости описывать действие error в контроллере SiteController. Т.к. Yii2 использует ErrorAction по умолчанию, который вшит в фреймворк. SiteController.php:

class SiteController extends Controller
{
    // ...
    public function actions()
    {
        return [
            'error' => [
                'class' => 'yii\web\ErrorAction',
            ],
            // ...
        ];
    }
    // ...
}

По умолчанию yii\web\ErrorAction будет использовать для вывода ошибок представление (view): yourProject/views/site/error.php

Настройка представления (view) при конфигурации по умолчанию

Предположим, что используется конфигурация по умолчанию. В yourProject/config/web.php или yourProject/frontend|backend/config/main.php:

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

В контроллере SiteController приложения yourProject/controllers/SiteController.php:

class SiteController extends Controller
{
    // ...
    public function actions()
    {
        return [
            'error' => [
                'class' => 'yii\web\ErrorAction',
            ],
            // ...
        ];
    }
    // ...
}

Кастомизируем представление (view) вывода ошибок

Использовать свое представление (view) для вывода ошибки очень просто, достаточно добавить путь к view в настройки SiteController метод actions элемент массива error. Он будет перекрывать свойства yii\web\ErrorAction, файл SiteController.php:

class SiteController extends Controller
{
    // ...
    public function actions()
    {
        return [
            'error' => [
                'class' => 'yii\web\ErrorAction',
                'view' => '@app/views/site/myerror.php'
            ],
            // ...
        ];
    }
    // ...
}

Кастомизируем layout вывода ошибок

Для решения этой задачи у нас есть 2 варианта.

1-й вариант

Указать расположение представления (view) об ошибке напрямую. Например назначить отдельный layout для вывода view ошибки:

// Your error view yourErrorView.php
$this->context->layout = 'error_layout';

2-й вариант

Назначить layout для ошибок в методе beforeAction контроллера SiteController, SiteController.php:

public function beforeAction($action)
{
    if ($action->id == 'error') {
        $this->layout = 'error_layout';
    }
    return parent::beforeAction($action);
}

Использование кастомизированого действия (action) для вывода ошибок

Так же вы можете написать свой собственный метод действия обработки ошибок и использовать собственное view или layout для отображения информации об ошибке.

Например создайте действие myerror в контроллере SiteController и используйте его как метод обработки ошибок, SiteController.php:

class SiteController extends Controller
{
    // ...
    public function actionMyerror()
    {
        $exception = Yii::$app->errorHandler->exception;
        if ($exception !== null) {
            $statusCode = $exception->statusCode;
            $name = $exception->getName();
            $message = $exception->getMessage();
            $this->layout = 'your_error_layout';
            return $this->render('yourErrorView', [
                'exception' => $exception,
                'statusCode' => $statusCode,
                'name' => $name,
                'message' => $message
            ]);
        }
    }
}

Далее закоментируйте или удалите елемент error возвращаемого массива метода actions, SiteController.php:

class SiteController extends Controller
{
    // ...
    public function actions()
    {
        return [            
            // 'error' => [
            //    'class' => 'yii\web\ErrorAction',
            //    'view' => '@app/views/site/YOUR_ERROR_VIEW.php'
            // ],
            // ...
        ];
    }
    // ...
}

И последнее, укажите котроллер и действие для обработки ошибок в конфигурации приложения yourProject/config/web.php или yourProject/common|backend|frontend/config/main.php:

return [
    // ...
    'components' => [
        // ...
        'errorHandler' => [
            'errorAction' => 'site/myerror',
        ],
        // ...
    ],
    // ...
];

Теперь Yii2 будет использовать действие site/myerror указанные в нем loyout и view для вывода ошибок.