Как отформатировать все исключения Http как json в symfony5? - PullRequest
0 голосов
/ 09 апреля 2020

В контроллере 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

prod view of html for rendered exceptions

dev

dev view of html view for rendered exceptions

1 Ответ

0 голосов
/ 09 апреля 2020

Оказывается, все, что мне не хватало, это установка пакета сериализатора, как указано в symfony документах :

composer require symfony/serializer-pack

После этого мои исключения отображаются как json отлично .

...