sfErrorNotifierPlugin: контекст по умолчанию не существует - PullRequest
2 голосов
/ 25 мая 2011

Я установил sfErrorNotifierPlugin. Когда оба параметра reportErrors / reportPHPErrors reportPHPWarnings / reportWarnings имеют значение false, все в порядке. Но я хочу перехватывать PHP-исключения и предупреждения для получения электронной почты, но тогда все мои задачи не выполняются, включая clear-cache. После нескольких часов тестов я на 100% уверен, что проблема в set_exception_handler / set_error_handler.

Есть похожий вопрос: sfErrorNotifierPlugin для задачи symfony , но у автора возникли проблемы с пользовательской задачей. В моем случае даже встроенные задачи не выполняются.

Ответы [ 5 ]

3 голосов
/ 23 июня 2011

Ну, проблема не может быть решена таким образом, к сожалению. Используя sfErrorNotifierPlugin, я включил создание отчетов о предупреждениях / ошибках PHP (кроме исключений Symfony), и это привело к огромным проблемам, например. сбой встроенных задач, таких как очистка кеша.

Решением, которое я выбрал, было загрузить плагин только в режиме без задач (класс конфигурации проекта):

  public function setup()
  {
    $this->enableAllPluginsExcept('sfPropelPlugin');
    if ('cli' == php_sapi_name()) $this->disablePlugins('sfErrorNotifierPlugin');
  }

Когда задача выполнена, все работает нормально. Когда приложение запускается из браузера, электронные письма отправляются, когда возникает исключение / предупреждение (возможно, кто-то найдет это полезным).

3 голосов
/ 25 мая 2011

Я не использовал sfErrorNotifierPlugin, но натолкнулся на «Контекст по умолчанию не существует».сообщения до.Это происходит, когда выполняется вызов sfContext::getInstance(), а контекст просто не существует.У меня это часто случалось из пользовательских задач.Одним из решений является добавление sfContext::createInstance() перед вызовом к sfContext::getInstance().Это обеспечит существование контекста.

Есть интересное сообщение в блоге «Почему sfContext :: getInstance () плоха», в котором более подробно - http://webmozarts.com/2009/07/01/why-sfcontextgetinstance-is-bad/

0 голосов
/ 22 октября 2013

Я столкнулся с той же проблемой при использовании плагина sfErrorNotifier.

В моем конкретном случае я заметил предупреждение:

Warning: ob_start(): function '' not found or invalid function name in /var/www/ncsoft_qa/lib/vendor/symfony/lib/config/sfApplicationConfiguration.class.php on line 155

Примечание: ob_start (): не удалось создать буфер в /var/www/ncsoft_qa/lib/vendor/symfony/lib/config/sfApplicationConfiguration.class.php в строке 155

Итак, проверкафайл: класс sfApplicationConfiguration.class.php, строка 155,

Я заменил '' на ноль, затем предупреждения исчезают, а также ошибка!

ob_start(sfConfig::get('sf_compressed') ? 'ob_gzhandler' : ''); плохо

ob_start(sfConfig::get('sf_compressed') ? 'ob_gzhandler' : null); хорошо

0 голосов
/ 28 октября 2011

вы можете проверить существование экземпляра, прежде чем делать что-то внутри класса.Нравится:

if(sfContext::hasInstance())
  $this->microsite_id = sfContext::getInstance()->getUser()->getAttribute('active_microsite');
0 голосов
/ 27 мая 2011

Оружие правильно объяснило проблему. Но обычно контекст не существует при выполнении задач бэкэнда / обслуживания на консоли. И вам легче справиться с этим условием.

Проверьте, действительно ли вам нужен контекст?

Если вы это сделаете, зачем вам это нужно? Иногда вы хотите, чтобы пользователь заполнял поле create_by. Вы можете обойти это путем жесткого кодирования идентификатора пользователя.

Если вы хотите сделать что-то более интегрированное, создайте страницу (которая будет иметь контекст) и запустите задачу оттуда.

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