В контроллере symfony5 я могу вернуть json ответов через:
return $this->json(['key' => 'content');
Тем не менее, когда я генерирую исключение HttpException, я вижу страницу ошибки html по умолчанию как в dev, так и в производстве.
Я хочу создать успокоительный API, поэтому я хочу преобразовать все исключения HttpException в json.
Я хочу настроить все свои контроллеры для форматирования их ответа как json. Самое большее, я хочу добавить один обработчик исключений, который бы преобразовывал исключения в правильные сообщения. (В prod должно быть меньше информации, в dev может содержаться трассировка стека исключений.)
Как мне этого добиться? Я думал, что смогу использовать опцию format
аннотации @Route
, но она не работает.
Это мой пример контроллера:
<?php declare(strict_types=1);
namespace App\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\Routing\Annotation\Route;
class StatusController extends AbstractController
{
/**
* @Route("/status", name="status", format="json")
* @Template
* @return JsonResponse
*/
public function status()
{
if (true) {
// this will render as html, how to serialize it as json?
throw new NotFoundHttpException("This is an example");
}
$ok = new \stdClass();
$ok->status = "OK";
return $this->json($ok);
}
}
При поиске я пришел через этот PR , который, кажется, достигает того, что я пытаюсь сделать, но я не уверен, что мне не хватает.
Вкл. symfony блог Я нашел следующее В ответ Йонель Черуто сказал:
, вам нужно установить / включить компонент сериализатора,
, но я не знаю, что это влечет за собой.
В dev и prod я получил html просмотров вместо json отклика:
prod
dev