Обработка ошибок


Прежде чем приступить к активной разработке приложения, стоит озаботиться уровнем и обработкой возможных ошибок сервера. Самая популярная - 404 Not Found (страница не найдена). Возникает тогда, когда в адресной строке неверно набран URL страницы. Дабы не пугать пользователя, а наоборот, мягко ему намекнуть, что он ошибся, в таком случае показывают специальную страницу с объяснениями и необходимыми ссылками.

Как организовать саму стрницу - отдельная тема, мы её рассматривать не будем. А как задействовать этот функционал в фреймворке - рассмотрим.

По умолчанию обработка 404 в фреймворке отключена. На неверный URL он ответит ошибкой интерпретатора уровня Warning, что не найден контроллер или экшен. Но если включить опцию 'abc_404' в секции 'errors' любого конфигурационнного файла:
1
2
3
4
5

                
'errors' => [ 
                                
'abc_404'          => true,
                ], 




то вместо ошибки будет показана такая картинка:



А если вместо true указать путь до шаблона страницы 404.html, то будет показан этот шаблон.
Важно! Путь нужно указать полный, от корня. Если нужно универсальное решение, стоит сделать так же, как с шаблонами:
1
2
3
4
5
6
7

        'errors' => [  
                          
'abc_404'    => dirname(dirname(__DIR__))  
                                       .
'/'basename(dirname(__DIR__)) 
                                       .
'/theme/tpl/404.tpl'
        
],  




Примерно та же картина и с ошибкой 500 Internal Server Error (ошибка сервера). Если включить опцию 'abc_500', либо указать в ней путь до шаблона, то ошибки будут красиво завуалированы:
1
2
3
4
5
6

                
'errors' => [ 
                                
'abc_404'          => true,                                
                                
'abc_500'          => true
                ],




Еще в этой секции можно выставить общий уровень обработки ошибок, и уровень реагирования страницей 500:
1
2
3
4
5
6
7
8

                
'errors' => [ 
                                
'error_reporting'  => E_ALL// Общий уровень ошибок
                                
'level_500'        => E_ALL & ~E_NOTICE// Уровень, на который будет выдана страница 500
                                
'abc_404'          => true
                                
'abc_500'          => true
                ],




Стоит отметить, что у опции 'abc_500' приоритет перед дебаггингом. Если она включена, дебаггер работать не будет.