Вмикаємо/вимикаємо повідомлення про помилки
У 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 для виведення помилок.