FOSRestBundle отдает JSON с ошибкой

Возникла ошибка в коде на продакшене и она видна в /var/logs/nginx/site.error, но сервис возвращает успешный результат с кодом 200.

Хорошо, я пытаюсь повторить ситуацию на дев-машине и получаю вместо успешного результата - json c все той же ошибкой:

[{"error":{"code":500,"message":"Notice: Undefined index: country_name in ...

как так, ведь в php.ini у меня стоит display_errors = Off, при этом app/config/config_dev.yml :

imports:
- { resource: config.yml }

а в файле config.yml ничего подобно ниже описанного нет:

monolog:
  handlers:
    nested:
      type:  stream
      path:  "%kernel.logs_dir%/%kernel.environment%.log"
      level: debug

т.е. логи вообще не должны писаться и в стандартный файл app/logs/dev.log они действительно не пишутся, но в output выдаются.

На странице бандла написано, что мы можем задавать что будем ловить, но мы не задавали, что будем ловить Symfony\Component\Debug\Exception\FlattenException и мы не подписывались на ExceptionListener который и создает Symfony\Component\Debug\Exception\FlattenException который потом обрабатывает fos-user-bundle.

Возникает вопрос - кто такое придумал, я ж не пишу хэндлер ошибок, я просто не хочу, чтобы ошибки принтились в аутпут, почему это происходит?

Ответ: оказывается у fos_rest есть подписчик vendor/friendsofsymfony/rest-bundle/FOS/RestBundle/Resources/config/exception_listener.xml

<parameters>
   <parameter key="fos_rest.exception_listener.controller">fos_rest.controller.exception:showAction</parameter>
</parameters>
<services>
   <service id="fos_rest.exception_listener" class="%fos_rest.exception_listener.class%">
      <tag name="kernel.event_subscriber" />
      <tag name="monolog.logger" channel="request" />
      <argument>%fos_rest.exception_listener.controller%</argument>
      <argument type="service" id="logger" on-invalid="null" />
   </service>

и этот подписчик срабатывает при эксепшенах, в результате чего вызывается \FOS\RestBundle\Controller\ExceptionController::showAction

А виной тому, что в результате нотиса выбрасывает эксепшен, являетя \Symfony\Component\Debug\ErrorHandler::handle

Закономерный вопрос - кто включет displayErrors? и ответ - мы сами это делаем вызывая Debug::enable(); в web/app_dev.php и именно поэтому на продакшене ( web/app.php ) нет такой проблемы.

Удачки.

Оцени публикацию:
  • 0,0
Оценили человек: 0

Похожие статьи:

Справочники и учебники:


Предложения и пожелания:
Ваше имя:
Ваш E-mail:
Сколько будет Οдин + Τри
Главная
X

Новые заметки:

Про что мы забываем когда делаем оценку задачи по времени

Список вопросов для собеседования разработчика по телефону

Symfony2 авторизация без Doctrine2 для чайника

Phpstorm7 LiveEdit

Жесткий хабр или не хабр, тогда кто?

Яндекс.Деньги мошенничество

Как узнать какие страницы в поиске яндекса или это секрет

Последние комменты:

Yapro CMS:

Здравствуйте, Гость | Войти | Регистрация | Карта сайта | RSS ленты | Ошибка в тексте? Выделите её мышкой и нажмите: Ctrl + Enter

youtube.com/watch?v=7hFivbgIEqk

При полном или частичном использовании материалов данного сайта, ссылка на сайт "yapro.ru" обязательна как на источник информации.
Автоматический импорт материалов и информации с сайта запрещен.
Copyrights © 2007 - 2018 YaPro.Ru

Главная » Веб-мастеру » PHP »