Исключение LockedHttpException
Исключение LockedHttpException представляет собой HTTP-исключение, которое соответствует статус-коду 423 Locked. Оно используется в ситуациях, когда доступ к ресурсу временно или постоянно заблокирован. Например, при попытке редактирования документа, который уже кем-то редактируется, или при обращении к файлу, заблокированному системой. Класс наследуется от HttpException и позволяет передать сообщение об ошибке, а также дополнительные заголовки.
Синтаксис
use Symfony\Component\HttpKernel\Exception\LockedHttpException;
throw new LockedHttpException(
string $message = '',
\Throwable $previous = null,
int $code = 0,
array $headers = []
);
Пример
Давайте выбросим исключение LockedHttpException в контроллере, если ресурс заблокирован:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\HttpKernel\Exception\LockedHttpException;
class ArticleController extends AbstractController
{
#[Route('/article/{id}', name: 'article_show')]
public function show(int $id): Response
{
$isLocked = true;
if ($isLocked) {
throw new LockedHttpException('The article is locked for editing.');
}
return new Response('Article content');
}
}
?>
При обращении к адресу /article/1 Symfony вернёт ответ со статус-кодом 423 и текстом ошибки.
Результат выполнения кода:
The article is locked for editing.
Пример
Давайте добавим кастомный заголовок к исключению:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\HttpKernel\Exception\LockedHttpException;
class ArticleController extends AbstractController
{
#[Route('/article/{id}/edit', name: 'article_edit')]
public function edit(int $id): Response
{
$headers = ['X-Lock-Reason' => 'Editing in progress'];
throw new LockedHttpException(
'The resource is locked.',
null,
0,
$headers
);
}
}
?>
В этом случае ответ будет содержать заголовок X-Lock-Reason со значением Editing in progress.
Смотрите также
-
исключение
HttpException,
базовый класс для всех HTTP-исключений -
исключение
ConflictHttpException,
которое сигнализирует о конфликте версий ресурса -
исключение
ServiceUnavailableHttpException,
которое указывает на временную недоступность сервиса -
исключение
PreconditionFailedHttpException,
которое возникает при невыполнении предварительного условия запроса