|
|
|
Error Handling
|
|
|
|
==============
|
|
|
|
|
|
|
|
Error handling in Yii is different from plain PHP. First of all, all non-fatal errors are converted to exceptions so
|
|
|
|
you can use `try`-`catch` to work with these. Second, even fatal errors are rendered in a nice way. In debug mode that
|
|
|
|
means you have a trace and a piece of code where it happened so it takes less time to analyze and fix it.
|
|
|
|
|
|
|
|
Using controller action to render errors
|
|
|
|
----------------------------------------
|
|
|
|
|
|
|
|
Default Yii error page is great for development mode and is OK for production if `YII_DEBUG` is turned off but you may
|
|
|
|
have an idea how to make it more suitable for your project. An easiest way to customize it is to use controller action
|
|
|
|
for error rendering. In order to do so you need to configure `errorHandler` component via application config:
|
|
|
|
|
|
|
|
```php
|
|
|
|
return [
|
|
|
|
// ...
|
|
|
|
'components' => [
|
|
|
|
// ...
|
|
|
|
'errorHandler' => [
|
|
|
|
'errorAction' => 'site/error',
|
|
|
|
],
|
|
|
|
```
|
|
|
|
|
|
|
|
After it is done in case of error Yii will launch `SiteController::actionError()`. Since errors are converted to
|
|
|
|
exceptions we can get exception from error handler:
|
|
|
|
|
|
|
|
```php
|
|
|
|
public function actionError()
|
|
|
|
{
|
|
|
|
$exception = \Yii::$app->getErrorHandler()->exception;
|
|
|
|
$this->render('myerror', ['message' => $exception->getMessage()]);
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
Since most of the time you need to adjust look and feel only, Yii provides `ErrorAction` class that can be used in
|
|
|
|
controller instead of implementing action yourself:
|
|
|
|
|
|
|
|
```php
|
|
|
|
public function actions()
|
|
|
|
{
|
|
|
|
return [
|
|
|
|
'error' => [
|
|
|
|
'class' => 'yii\web\ErrorAction',
|
|
|
|
],
|
|
|
|
];
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
After defining `actions` in `SiteController` as shown above you can create `views/site/error.php`. In the view there
|
|
|
|
are three varialbes available:
|
|
|
|
|
|
|
|
- `$name`: the error name
|
|
|
|
- `$message`: the error message
|
|
|
|
- `$exception`: the exception being handled
|
|
|
|
|