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

Исключение ConflictHttpException

Класс ConflictHttpException наследуется от HttpException и представляет HTTP-ошибку с кодом 409. Исключение бросают, когда запрос не может быть выполнен из-за конфликта с текущим состоянием ресурса: например, при попытке создать запись с уже существующим уникальным значением или изменить объект, который был изменён другим пользователем.

Первым параметром конструктор принимает сообщение об ошибке. Вторым параметром можно передать предыдущее исключение, а третьим - массив HTTP-заголовков ответа.

Синтаксис

<?php use Symfony\Component\HttpKernel\Exception\ConflictHttpException; throw new ConflictHttpException( string $message = '', Throwable $previous = null, int $code = 0, array $headers = [] ); ?>

Пример

Давайте бросим исключение ConflictHttpException в контроллере, если статья с таким заголовком уже существует:

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Exception\ConflictHttpException; use Symfony\Component\Routing\Attribute\Route; class ArticleController extends AbstractController { #[Route('/article/create', name: 'article_create')] public function create(string $title): Response { $existing = ['article', 'user', 'hello']; if (in_array($title, $existing, true)) { throw new ConflictHttpException('Article already exists'); } return new Response('created'); } } ?>

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

Article already exists

Пример

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

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Exception\ConflictHttpException; use Symfony\Component\Routing\Attribute\Route; class ArticleController extends AbstractController { #[Route('/article/update', name: 'article_update')] public function update(int $id): Response { try { if ($id === 1) { throw new ConflictHttpException('Version conflict'); } return new Response('updated'); } catch (ConflictHttpException $e) { return new Response( $e->getMessage(), $e->getStatusCode() ); } } } ?>

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

Version conflict

Пример

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

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Exception\ConflictHttpException; use Symfony\Component\Routing\Attribute\Route; class ArticleController extends AbstractController { #[Route('/article/lock', name: 'article_lock')] public function lock(): Response { throw new ConflictHttpException( 'Resource is locked', null, 0, ['Retry-After' => '60'] ); } } ?>

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

Resource is locked

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

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