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

Исключение PreconditionFailedHttpException

Исключение PreconditionFailedHttpException относится к семейству HTTP-исключений Symfony и соответствует статус-коду 412. Оно выбрасывается, когда клиент отправил запрос с заголовками If-Match, If-None-Match, If-Unmodified-Since или If-Range, но текущее состояние ресурса не соответствует этим условиям. Конструктор принимает первым параметром сообщение об ошибке, вторым - предыдущее исключение, третьим - код ошибки, четвёртым - массив HTTP-заголовков.

Синтаксис

<?php use Symfony\Component\HttpKernel\Exception\PreconditionFailedHttpException; throw new PreconditionFailedHttpException($message, $previous, $code, $headers); ?>

Пример

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

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Exception\PreconditionFailedHttpException; use Symfony\Component\Routing\Attribute\Route; class ArticleController extends AbstractController { #[Route('/article/{id}', name: 'article_show')] public function show(int $id, string $version): Response { $currentVersion = 'abcde'; if ($version !== $currentVersion) { throw new PreconditionFailedHttpException( 'Resource version mismatch' ); } return new Response('article content'); } } ?>

Результат выполнения кода для адреса /article/1?version=xyz:

412 Precondition Failed

Пример

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

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Exception\PreconditionFailedHttpException; use Symfony\Component\Routing\Attribute\Route; class ArticleController extends AbstractController { #[Route('/article/{id}', name: 'article_show')] public function show(int $id, string $version): Response { try { $currentVersion = 'abcde'; if ($version !== $currentVersion) { throw new PreconditionFailedHttpException( 'Resource version mismatch', null, 0, ['X-Expected-Version' => $currentVersion] ); } return new Response('article content'); } catch (PreconditionFailedHttpException $e) { return new Response( $e->getMessage(), $e->getStatusCode(), $e->getHeaders() ); } } } ?>

Результат выполнения кода для адреса /article/1?version=xyz:

Resource version mismatch

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

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