Исключения
Введение
Компоненты MVC в Zend Framework используют фронт-контроллер, это
означает, что все запросы к сайту проходят через единственную
точку входа. Поэтому все исключения, брошенные внутри компонент, в
конечном итоге доходят до фронт-контроллера, что позволяет
разработчикам обрабатывать их в одном месте.
Сообщения исключений и данные обратной трассировки часто содержат
важную системную информацию, такую, как текст запросов SQL,
местонахождение файлов и т.п. Поэтому в целях защиты вашего сайта
Zend_Controller_Front по умолчанию отлавливает все
исключения и регистрирует их в объектах ответа; в свою очередь,
объект ответа по умолчанию не отображает сообщения исключений.
Обработка исключений
В компоненты MVC уже встроено несколько механизмов, дающих
возможность обрабатывать исключения.
-
По умолчанию плагин
ErrorHandler зарегистрирован и включен. Этот плагин
предназначен для обработки:
Ошибок, вызванных отсутствием запрошенного контроллера
или действия
Ошибок, произошедших внутри котроллеров действий
Он действует как плагин postDispatch() и
производит проверку, есть ли исключение диспетчера,
контроллера действий и др. Если обнаружено
исключение, то производится переход на контроллер-обработчик
ошибок.
Этот обработчик охватывает большинство исключительных
ситуаций и позволяет элегантно обработать случаи
отсутствующего контроллера или действия.
-
Zend_Controller_Front::throwExceptions()
Посредством передачи булевого значения TRUE
этому методу вы говорите фронт-контроллеру, что будете
самостоятельно обрабатывать исключения вместо того, чтобы
они собирались объектом ответа или обрабатывались плагином
ErrorHandler. Например:
span style="color: #808080; font-style: italic;">// самостоятельная обработка исключения
}
Возможно, этот метод является наиболее легким способом
добавления собственной обработки исключений, охватывающей
весь диапазон возможных исключений в вашем приложении.
-
Zend_Controller_Response_Abstract::renderExceptions()
Путем передачи булевого значения TRUE
этому методу, вы говорите объекту ответа, что он должен
вместе с заголовком и содержимым ответа выводить сообщения
исключений и данные обратной трассировки. В этом случае
будут отображены любые исключения, сгенерированные вашим
приложением. Это рекомендуется только для непроизводственной
среды.
-
Zend_Controller_Front::returnResponse() и
Zend_Controller_Response_Abstract::isException() .
После передачи булевого значения TRUE методу
Zend_Controller_Front::returnResponse() метод
Zend_Controller_Front::dispatch() будет не
выводить ответ, а возвращать его. Имея объект ответа, вы
можете проверить, были ли отловлены исключения, используя
его метод isException() , и извлекая их через
метод getException() . Например:
span style="color: #808080; font-style: italic;">// обработка исключений ...
Основное преимущество этого метода по сравнению с
Zend_Controller_Front::throwExceptions()
состоит в том, что он позволяет управлять выводом ответа
после обработки исключений. Это позволит отлавливать любые
исключения в цепочке контроллеров, в отличие от плагина
ErrorHandler.
Исключения в MVC, с которыми вы можете встретиться
Различные компоненты MVC - объекты запросов, маршрутизаторов,
диспетчеров, контроллеров действий, ответов могут бросать свои
исключения. Одни исключения при определенных условиях могут быть
замещены, другие используются для указания разработчику, что
структура приложения, возможно, нуждается в рассмотрении.
Некоторые примеры:
|
|