Исключение PreconditionRequiredHttpException
Класс PreconditionRequiredHttpException относится к семейству HTTP-исключений Symfony и соответствует коду ответа 428. Он выбрасывается, когда сервер требует, чтобы клиент отправил обязательные заголовки предварительного условия (например, If-Match или If-Unmodified-Since), но запрос их не содержит. Первым параметром конструктора передаётся текст сообщения, вторым - предыдущее исключение, третьим - массив заголовков ответа.
Синтаксис
<?php
use Symfony\Component\HttpKernel\Exception\PreconditionRequiredHttpException;
$exception = new PreconditionRequiredHttpException(
string $message = '',
\Throwable $previous = null,
int $code = 0,
array $headers = []
);
?>
Пример
Давайте выбросим исключение PreconditionRequiredHttpException в контроллере, если запрос не содержит заголовок If-Match:
<?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\PreconditionRequiredHttpException;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/article/edit', name: 'article_edit')]
public function edit(Request $request): Response
{
if (!$request->headers->has('If-Match')) {
throw new PreconditionRequiredHttpException(
'The If-Match header is required for this request.'
);
}
return new Response('article updated');
}
}
?>
Результат выполнения кода при отсутствии заголовка If-Match:
HTTP/1.1 428 Precondition Required
Content-Type: application/json
{
"title": "Precondition Required",
"status": 428,
"detail": "The If-Match header is required for this request."
}
Пример
Давайте перехватим исключение PreconditionRequiredHttpException и получим его статус-код через метод getStatusCode:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\PreconditionRequiredHttpException;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/article/check', name: 'article_check')]
public function check(): Response
{
try {
throw new PreconditionRequiredHttpException('Precondition is required.');
} catch (PreconditionRequiredHttpException $e) {
$status = $e->getStatusCode();
$message = $e->getMessage();
return new Response($status . ': ' . $message);
}
}
}
?>
Результат выполнения кода:
"428: Precondition is required."
Смотрите также
-
исключение
PreconditionFailedHttpException,
которое соответствует коду 412 -
исключение
HttpException,
которое является базовым для HTTP-исключений -
метод
getStatusCode,
который возвращает код ответа исключения -
метод
getMessage,
который возвращает текст сообщения исключения