|
|
@ -5,3 +5,52 @@ Error handling in Yii is different from plain PHP. First of all, all non-fatal e |
|
|
|
you can use `try`-`catch` to work with these. Second, even fatal errors are rendered in a nice way. In debug mode that |
|
|
|
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. |
|
|
|
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 |
|
|
|
|
|
|
|
|
|
|
|