sfErrorNotifierPlugin для задачи Symfony - PullRequest
1 голос
/ 11 мая 2011

Мое приложение выполняет огромную пакетную обработку внутри задачи Symfony, и я хочу получать уведомления обо всех ошибках PHP и необработанных исключениях.

Итак, я попробовал sfErrorNotifierPlugin, и он отлично работает в веб-контексте (доступ кприложение из браузера);проблема в том, что я не могу заставить его работать на моих задачах Symfony.

Есть ли способ заставить его работать в задачах?

Ответы [ 3 ]

3 голосов
/ 02 ноября 2012

в ProjectConfiguration.class.php

public function setup()
  {
    if ('cli' == php_sapi_name()) $this->disablePlugins('sfErrorNotifierPlugin');
  }
3 голосов
/ 11 мая 2011

sfTask не имеет обработки исключений, как в веб-интерфейсе, но вы можете обойти это: в конечном итоге, исключенные исключения передаются в sfErrorNotifier::notifyException.

Оберните метод вашей задачи execute в большой блок try-catch:

public function execute($arguments = array(), $options = array())
{
  try {
    //your code here
  }
  catch(Exception $e) {
    sfErrorNotifier::notifyException($e); //call the notifier
    throw $e; //rethrow to stop execution and to avoid problems in some special cases
  }
}

Имейте в виду, что для правильной работы требуется параметр приложения (используются настройки из app.yml).

0 голосов
/ 19 мая 2011

Спасибо за вашу помощь @Maerlyn, мое решение мало чем отличается от вашего.

Я решил проблему, переопределяющую метод doRun в моих задачах следующим образом:

protected function doRun(sfCommandManager $commandManager, $options)
{
    try
    {
      return parent::doRun($commandManager, $options);

    }
    catch (Exception $e)
    {
      $this->dispatcher->notifyUntil(new sfEvent($e, 'application.throw_exception'));
      throw $e;
    }
  }

Это решает проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...