Как сбросить 400 неверный запрос от контроллера Symfony?

Я установил очень простую заглушку контроллера Symfony 3.3, основное действие которого выглядит так:

/**
 * @Route("/pair-gallery/{id}")
 */
public function indexAction(Int $id)
{
    $output = [];
    return new JsonResponse($output);
}

Когда я даю ему строку в качестве аргумента в URL-адресе (а не целое число), я получаю ошибку 500. Это не ужасно, но это не совсем то, что я хочу.

Как я могу сказать Symfony, чтобы вместо этого отправлял ответный код 400 («Плохой запрос»)?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
10
0
9 489
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вы можете просто создать исключение, которое автоматически преобразуется в ответ HTTP 400:

throw new BadRequestHttpException('Message');

Если вы хотите уточнить возникший код ошибки http (возможно, вы хотите выдать непонятный код ошибки, например 418), вы можете передать его в качестве третьего параметра:

throw new BadRequestHttpException('Message', null, 418);

Есть ли хороший способ сделать это без генерации исключения (и, таким образом, запуска монолога)? В моем проекте я сейчас выбрасываю исключение, но это приводит к очень большому количеству ошибок в журнале, которые я бы не стал рассматривать как ошибки.

Rich Court 01.04.2019 16:41

вы можете указать код возврата следующим образом:

return new JsonResponse($output, 400);

Для тех, кто решил ту же проблему, но для Symfony 5

$response = new JsonResponse($output, 400);  

return $response->send(); // Send it !

Документы Symfony

Другие вопросы по теме