Я установил очень простую заглушку контроллера Symfony 3.3, основное действие которого выглядит так:
/**
* @Route("/pair-gallery/{id}")
*/
public function indexAction(Int $id)
{
$output = [];
return new JsonResponse($output);
}
Когда я даю ему строку в качестве аргумента в URL-адресе (а не целое число), я получаю ошибку 500. Это не ужасно, но это не совсем то, что я хочу.
Как я могу сказать Symfony, чтобы вместо этого отправлял ответный код 400 («Плохой запрос»)?






Вы можете просто создать исключение, которое автоматически преобразуется в ответ HTTP 400:
throw new BadRequestHttpException('Message');
Если вы хотите уточнить возникший код ошибки http (возможно, вы хотите выдать непонятный код ошибки, например 418), вы можете передать его в качестве третьего параметра:
throw new BadRequestHttpException('Message', null, 418);
вы можете указать код возврата следующим образом:
return new JsonResponse($output, 400);
Для тех, кто решил ту же проблему, но для Symfony 5
$response = new JsonResponse($output, 400);
return $response->send(); // Send it !
Есть ли хороший способ сделать это без генерации исключения (и, таким образом, запуска монолога)? В моем проекте я сейчас выбрасываю исключение, но это приводит к очень большому количеству ошибок в журнале, которые я бы не стал рассматривать как ошибки.