Исключение GoneHttpException
Исключение GoneHttpException относится к семейству HTTP-исключений
Symfony и соответствует статус-коду 410 Gone. Оно выбрасывается,
когда запрошенный ресурс существовал раньше, но был окончательно
удалён и больше не будет доступен. В отличие от ошибки 404, которая
означает, что ресурс не найден, ошибка 410 явно сообщает клиенту,
что ресурс удалён навсегда. Первым параметром конструктору передаётся
сообщение об ошибке, вторым - предыдущее исключение, третьим -
заголовки ответа.
Синтаксис
new GoneHttpException(message, previous, headers)
Пример
Давайте выбросим исключение GoneHttpException в контроллере,
когда пользователь обращается к удалённой статье:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\GoneHttpException;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/article/{id}', name: 'article_show')]
public function show(int $id): Response
{
if ($id === 1) {
throw new GoneHttpException('This article has been deleted');
}
return new Response('article ' . $id);
}
}
?>
Результат выполнения кода для адреса /article/1:
This article has been deleted
Пример
Давайте передадим в исключение дополнительные заголовки ответа:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\GoneHttpException;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/article/{id}', name: 'article_show')]
public function show(int $id): Response
{
if ($id === 1) {
throw new GoneHttpException(
'This article has been deleted',
null,
['X-Deleted-At' => '2024-01-01']
);
}
return new Response('article ' . $id);
}
}
?>
Результат выполнения кода для адреса /article/1:
This article has been deleted
Пример
Давайте перехватим исключение GoneHttpException и получим
его статус-код через метод getStatusCode:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\GoneHttpException;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/article/{id}', name: 'article_show')]
public function show(int $id): Response
{
try {
if ($id === 1) {
throw new GoneHttpException('This article has been deleted');
}
return new Response('article ' . $id);
} catch (GoneHttpException $e) {
return new Response(
$e->getMessage(),
$e->getStatusCode()
);
}
}
}
?>
Результат выполнения кода для адреса /article/1:
"This article has been deleted"
Смотрите также
-
исключение
HttpException,
которое является базовым для HTTP-исключений -
исключение
NotFoundHttpException,
которое соответствует ошибке 404 -
метод
getStatusCode,
который возвращает статус-код исключения -
метод
getMessage,
который возвращает сообщение исключения