РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
533 of 1361 menu

Исключение UnprocessableEntityHttpException

Исключение UnprocessableEntityHttpException относится к группе HTTP-исключений Symfony и соответствует статус-коду 422 Unprocessable Entity. Оно выбрасывается тогда, когда запрос синтаксически корректен, но содержит данные, которые сервер не в состоянии обработать: например, неверно заполненную форму, некорректные бизнес-правила или несоответствие типов. Конструктор принимает первым параметром сообщение об ошибке, вторым - предыдущее исключение, третьим - код ошибки, четвёртым - массив заголовков ответа.

Синтаксис

new UnprocessableEntityHttpException( string $message = '', Throwable $previous = null, int $code = 0, array $headers = [] )

Пример

Давайте выбросим исключение UnprocessableEntityHttpException в контроллере, если пришедшие данные не проходят проверку:

<?php namespace AppController; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentHttpFoundationRequest; use SymfonyComponentHttpKernelExceptionUnprocessableEntityHttpException; class ArticleController extends AbstractController { public function create(Request $request): Response { $title = $request->request->get('title'); if (empty($title)) { throw new UnprocessableEntityHttpException('Title is required'); } return new Response('Article created'); } } ?>

Если отправить запрос без поля title, Symfony вернёт ответ со статусом 422 и текстом исключения.

Пример

Давайте перехватим исключение и вернём клиенту JSON с описанием ошибки:

<?php namespace AppController; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationJsonResponse; use SymfonyComponentHttpKernelExceptionUnprocessableEntityHttpException; class ArticleController extends AbstractController { public function validate(): JsonResponse { try { throw new UnprocessableEntityHttpException('Invalid data'); } catch (UnprocessableEntityHttpException $e) { return new JsonResponse([ 'error' => $e->getMessage(), 'status' => $e->getStatusCode() ], $e->getStatusCode()); } } } ?>

Результат выполнения кода:

{"error":"Invalid data","status":422}

Пример

Давайте передадим собственные заголовки вместе с исключением:

<?php namespace AppController; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentHttpKernelExceptionUnprocessableEntityHttpException; class ArticleController extends AbstractController { public function store(): Response { throw new UnprocessableEntityHttpException( 'Validation failed', null, 0, ['X-Error-Code' => 'VALIDATION_FAILED'] ); } } ?>

В ответе появится заголовок X-Error-Code: VALIDATION_FAILED, а статус будет равен 422.

Смотрите также

  • исключение HttpException,
    базовый класс для всех HTTP-исключений Symfony
  • исключение BadRequestHttpException,
    которое соответствует ошибке 400
  • исключение ValidationFailedException,
    которое выбрасывается при неудачной валидации
  • метод getStatusCode,
    который возвращает HTTP-код исключения
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить