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

Исключение AccessDeniedHttpException

Исключение AccessDeniedHttpException наследуется от HttpException и сигнализирует о том, что доступ к ресурсу запрещён. Оно выбрасывается, когда пользователь аутентифицирован, но не имеет нужных прав для выполнения операции. Первым параметром передаётся сообщение об ошибке, вторым - предыдущее исключение, третьим - код ошибки. По умолчанию исключение возвращает HTTP-статус 403.

Синтаксис

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

Пример

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

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException; use Symfony\Component\Routing\Attribute\Route; class ArticleController extends AbstractController { #[Route('/article/delete', name: 'article_delete')] public function delete(): Response { if (!$this->isGranted('ROLE_ADMIN')) { throw new AccessDeniedHttpException('Access denied for this action'); } return new Response('article deleted'); } } ?>

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

"Access denied for this action"

Пример

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

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException; use Symfony\Component\Routing\Attribute\Route; class ArticleController extends AbstractController { #[Route('/article/edit', name: 'article_edit')] public function edit(): Response { try { if (!$this->isGranted('ROLE_EDITOR')) { throw new AccessDeniedHttpException('You cannot edit this article'); } return new Response('article edited'); } catch (AccessDeniedHttpException $e) { return new Response($e->getMessage(), $e->getStatusCode()); } } } ?>

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

"You cannot edit this article"

Пример

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

<?php use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException; $e = new AccessDeniedHttpException('Access denied'); echo $e->getStatusCode(); echo "\n"; echo $e->getMessage(); ?>

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

403 Access denied

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

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