Исключение NotFoundHttpException
Исключение NotFoundHttpException выбрасывается,
когда запрошенный ресурс не существует. Оно наследуется
от HttpException и автоматически преобразуется
в HTTP-ответ со статусом 404. Первым параметром
передаётся сообщение об ошибке, вторым - предыдущее
исключение, третьим - код ошибки.
Синтаксис
throw new NotFoundHttpException($message, $previous, $code);
Пример
Давайте выбросим исключение, если статья с указанным идентификатором не найдена:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/article/{id}', name: 'article_show')]
public function show(int $id): Response
{
$article = $this->findArticle($id);
if ($article === null) {
throw new NotFoundHttpException('Article not found');
}
return new Response($article);
}
private function findArticle(int $id): ?string
{
$articles = [1 => 'article 1', 2 => 'article 2', 3 => 'article 3'];
return $articles[$id] ?? null;
}
}
?>
Результат выполнения кода для адреса /article/5:
Article not found
Пример
Давайте передадим предыдущее исключение и код ошибки:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/user/{name}', name: 'article_user')]
public function user(string $name): Response
{
try {
$user = $this->findUser($name);
} catch (\Exception $e) {
throw new NotFoundHttpException('User not found', $e, 404);
}
return new Response($user);
}
private function findUser(string $name): string
{
throw new \Exception('Database error');
}
}
?>
Результат выполнения кода для адреса /user/abcde:
"User not found"
Смотрите также
-
исключение
HttpException,
которое является родителем для HTTP-исключений -
исключение
AccessDeniedHttpException,
которое сигнализирует об ошибке 403 -
интерфейс
HttpExceptionInterface,
который реализуют HTTP-исключения -
метод
getStatusCode,
который возвращает код HTTP-ответа