TrogWarZ
@TrogWarZ
web developer

Как написать единый обработчик неперехваченных ошибок?

Использую php 7.x + Symfony 3.x + FOSRestBundle + JsonApi.

Читал документацию – все их примеры жёстко завязаны на Twig, который я выкинул из проекта насовсем и, соответственно, решения оттуда не подходят.
Потом прочёл документацию по FOSRestBundle и в app/config/config.yml сделал так:
fos_rest:
    exception:
        enabled: true
        exception_controller: 'AppBundle\Controller\ExceptionController::showAction'
        codes:
            'Symfony\Component\HttpKernel\Exception\ConflictHttpException': 409

Частично помогло.

Но почему у меня API теперь возвращает три разных формата ошибок?

  1. Формат, описанный мною в конфиге. Так и нужно. Срабатывает в случае кода вроде throw new BadRequestHttpException();
  2. Какой-то рандомный Symfony-формат, заметил по логам только, откуда приходит – не понял, но смог вызвать похожее кодом типа
    return new Response('Page not found.', Response::HTTP_NOT_FOUND);

  3. Какой-то внутренний symfony (?) ответ в виде html-страниц (sic!). Срабатывает всегда когда выполняется код вроде $someObject->someFunctionThatDoesNotExists();

Как перехватить случаи 2 и 3? Особенно доставляет проблемы №3.

До использования Symfony я использовал для перехвата необработанных ошибок связку из set_error_handler + set_exception_handler + register_shutdown_function и работал с ними в одном месте. Как это принято в Symfony? Кого надо переопределить чтобы ни одна ошибка (кроме unrecoverable php fatal) не прошла мимо в каком-нибудь странном не определённом мною формате?
  • Вопрос задан
  • 380 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы