Исключение HttpException
Исключение HttpException предназначено для генерации HTTP ошибок
с указанным кодом состояния и пользовательским сообщением.
Оно автоматически преобразуется в соответствующий HTTP ответ
с правильным статус-кодом. Первым параметром передаётся код
состояния HTTP, вторым - сообщение об ошибке, третьим -
массив заголовков для ответа.
Синтаксис
<?php
throw new HttpException($statusCode, $message, $headers);
?>
Пример
Давайте выбросим исключение с кодом 404 в контроллере, если статья не найдена:
<?php
namespace AppHttpControllers;
use AppModelsArticle;
use SymfonyComponentHttpKernelExceptionHttpException;
class ArticleController extends Controller
{
public function show($id)
{
$article = Article::find($id);
if (!$article) {
throw new HttpException(404, 'Article not found');
}
return view('article.show', ['article' => $article]);
}
}
?>
Пример
Давайте выбросим исключение с кодом 403 и дополнительными заголовками для запрета доступа к ресурсу:
<?php
namespace AppHttpControllers;
use SymfonyComponentHttpKernelExceptionHttpException;
class AdminController extends Controller
{
public function dashboard()
{
if (!auth()->user()->isAdmin()) {
throw new HttpException(
403,
'Access denied. Admin rights required.',
['X-Reason' => 'Admin only']
);
}
return view('admin.dashboard');
}
}
?>
Пример
Давайте выбросим исключение с кодом 429 в случае превышения лимита запросов:
<?php
namespace AppHttpControllers;
use SymfonyComponentHttpKernelExceptionHttpException;
class ApiController extends Controller
{
public function getData()
{
$limitReached = true;
if ($limitReached) {
throw new HttpException(429, 'Too many requests. Please try again later.');
}
return response()->json(['data' => ['a', 'b', 'c']]);
}
}
?>
Пример
Давайте перехватим исключение и обработаем его с помощью обработчика исключений:
<?php
namespace AppExceptions;
use IlluminateFoundationExceptionsHandler as ExceptionHandler;
use Throwable;
use SymfonyComponentHttpKernelExceptionHttpException;
class Handler extends ExceptionHandler
{
public function render($request, Throwable $e)
{
if ($e instanceof HttpException) {
if ($e->getStatusCode() === 404) {
return response()->view('errors.404', [], 404);
}
if ($e->getStatusCode() === 403) {
return response()->view('errors.403', [], 403);
}
}
return parent::render($request, $e);
}
}
?>
Результат выполнения кода:
"Custom 404 error page rendered"
Смотрите также
-
исключение
NotFoundHttpException,
которое используется для ошибки 404 -
исключение
MethodNotAllowedHttpException,
которое используется для ошибки 405 -
исключение
TooManyRequestsHttpException,
которое используется для ошибки 429 -
исключение
AccessDeniedHttpException,
которое используется для ошибки 403