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

youtube.com/watch?v=7hFivbgIEqk

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

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