Исключение NotAcceptableHttpException
Исключение NotAcceptableHttpException представляет собой
специализированный класс для генерации HTTP-ответа
со статусом 406 Not Acceptable. Оно применяется, когда
клиент запрашивает данные в формате, который сервер
не может предоставить. Первым параметром передаётся
сообщение об ошибке, вторым - предыдущее исключение.
Синтаксис
<?php
use Symfony\Component\HttpKernel\Exception\NotAcceptableHttpException;
throw new NotAcceptableHttpException($message, $previous);
?>
Пример
Давайте выбросим исключение в контроллере, если
клиент запрашивает формат 'application/xml', который
мы не поддерживаем:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\NotAcceptableHttpException;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_index')]
public function index(Request $request): Response
{
$format = $request->getPreferredFormat();
if ($format === 'xml') {
throw new NotAcceptableHttpException('XML format is not supported');
}
return new Response('article');
}
}
?>
Результат выполнения кода для запроса с заголовком
Accept: application/xml:
<h1>406 Not Acceptable</h1>
<p>XML format is not supported</p>
Пример
Давайте используем исключение для проверки поддерживаемых форматов через заголовок Accept:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\NotAcceptableHttpException;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/article/{id}', name: 'article_show')]
public function show(int $id, Request $request): Response
{
$accept = $request->headers->get('Accept');
if ($accept === 'application/pdf') {
throw new NotAcceptableHttpException('PDF format is not available');
}
return new Response('article ' . $id);
}
}
?>
Результат выполнения кода для адреса
/article/5 с заголовком
Accept: application/pdf:
<h1>406 Not Acceptable</h1>
<p>PDF format is not available</p>
Пример
Давайте перехватим исключение и вернём кастомный ответ с другим статусом:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\NotAcceptableHttpException;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/article/check', name: 'article_check')]
public function check(): Response
{
try {
throw new NotAcceptableHttpException('Format not supported');
} catch (NotAcceptableHttpException $e) {
return new Response($e->getMessage(), 406);
}
}
}
?>
Результат выполнения кода:
Format not supported
Смотрите также
-
исключение
HttpException,
базовый класс для HTTP-исключений -
исключение
UnsupportedMediaTypeHttpException,
которое возвращает статус 415 -
исключение
BadRequestHttpException,
которое возвращает статус 400 -
метод
getStatusCode,
который возвращает код HTTP-ответа