Использую 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 теперь возвращает три разных формата ошибок?
- Формат, описанный мною в конфиге. Так и нужно. Срабатывает в случае кода вроде
throw new BadRequestHttpException();
- Какой-то рандомный Symfony-формат, заметил по логам только, откуда приходит – не понял, но смог вызвать похожее кодом типа
return new Response('Page not found.', Response::HTTP_NOT_FOUND);
- Какой-то внутренний symfony (?) ответ в виде html-страниц (sic!). Срабатывает всегда когда выполняется код вроде
$someObject->someFunctionThatDoesNotExists();
Как перехватить случаи 2 и 3? Особенно доставляет проблемы №3.
До использования Symfony я использовал для перехвата необработанных ошибок связку из
set_error_handler
+
set_exception_handler
+
register_shutdown_function
и работал с ними в одном месте. Как это принято в Symfony? Кого надо переопределить чтобы ни одна ошибка (кроме unrecoverable php fatal) не прошла мимо в каком-нибудь странном не определённом мною формате?