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

Исключение MethodNotAllowedHttpException

Исключение MethodNotAllowedHttpException наследуется от HttpException и соответствует HTTP-статусу 405. Оно выбрасывается компонентом Routing, когда для запрошенного URL найден маршрут, но ни один из методов контроллера не подходит под HTTP-метод входящего запроса. Первым параметром конструктор принимает массив разрешённых методов, вторым - сообщение, третьим - предыдущее исключение.

Синтаксис

new MethodNotAllowedHttpException( array $allowed, string $message = '', ?Throwable $previous = null, int $code = 0 )

Пример

Давайте выбросим исключение вручную, указав, что для адреса '/article' разрешены только методы 'GET' и 'POST':

<?php namespace AppController; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentHttpKernelExceptionMethodNotAllowedHttpException; use SymfonyComponentRoutingAttributeRoute; class ArticleController extends AbstractController { #[Route('/article', name: 'article_index')] public function index(): Response { $allowed = ['GET', 'POST']; throw new MethodNotAllowedHttpException($allowed); } } ?>

При обращении к адресу '/article' методом 'PUT' браузер получит ответ со статусом 405.

Пример

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

<?php namespace AppController; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentHttpKernelExceptionMethodNotAllowedHttpException; use SymfonyComponentRoutingAttributeRoute; class ArticleController extends AbstractController { #[Route('/article', name: 'article_index')] public function index(): Response { try { $allowed = ['GET', 'POST']; throw new MethodNotAllowedHttpException($allowed); } catch (MethodNotAllowedHttpException $e) { $status = $e->getStatusCode(); $headers = $e->getHeaders(); return new Response( 'Status: ' . $status . ', Allowed: ' . $headers['Allow'] ); } } } ?>

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

"Status: 405, Allowed: GET, POST"

Пример

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

<?php namespace AppController; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentHttpKernelExceptionMethodNotAllowedHttpException; use SymfonyComponentRoutingAttributeRoute; class ArticleController extends AbstractController { #[Route('/article', name: 'article_index')] public function index(): Response { $allowed = ['GET']; $previous = new Exception('previous error'); throw new MethodNotAllowedHttpException( $allowed, 'Method is not allowed for this route', $previous ); } } ?>

При перехвате такого исключения метод getMessage вернёт строку "Method is not allowed for this route", а getPrevious - исходное исключение.

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

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