Я создаю решение для мониторинга ошибок в PHP, необработанных исключений и всего, что пользователь хочет записать в таблицу базы данных.Вид замены решения для мониторинга в коммерческом Zend Server.
Я написал класс Monitor, который расширяет Zend_Log и может обрабатывать все упомянутые случаи.Моя цель - свести конфигурацию к одному месту, которое будет Bootstrap.В данный момент я инициализирую монитор следующим образом:
protected function _initMonitor()
{
$config = Zend_Registry::get('config');
$monitorDb = Zend_Db::factory($config->resources->db->adapter, $config->resources->db->params);
$monitor = new Survey_Monitor(new Zend_Log_Writer_Db($monitorDb, 'logEntries'), $config->projectName);
$monitor->registerErrorHandler()->logExceptions();
}
Метод registerErrorHandler () включает запись ошибок php в БД, метод logExceptions () является расширением и просто устанавливает защищенный флаг.
В сообщении об ошибке ErrorController я добавляю следующие строки:
//use the monitor to log exceptions, if enabled
$monitor = Zend_Registry::get('monitor');
if (TRUE == $monitor->loggingExceptions)
{
$monitor->log($errors->exception);
}
Хотя я бы хотел избежать добавления кода в ErrorController, я бы предпочел динамически зарегистрировать плагин.Это упростит интеграцию в существующие проекты для пользователя.
Вопрос: Могу ли я зарегистрировать плагин контроллера, использующий хук postDispatch, и добиться того же эффекта?Я не понимаю, какие события вызывают действие errorAction. Если на нескольких этапах схемы происходит несколько событий, нужно ли использовать несколько перехватчиков?