Исключение ItemNotFoundException
Исключение ItemNotFoundException относится к группе исключений,
которые выбрасываются при отсутствии нужного элемента в хранилище,
кэше или другом источнике данных. Обычно оно используется внутри
сервисов и репозиториев, когда по заданному идентификатору или
ключу не удаётся найти запись. Первым параметром передаётся
сообщение об ошибке, вторым - код исключения, третьим - предыдущее
исключение.
Синтаксис
new ItemNotFoundException(string $message = '', int $code = 0, ?Throwable $previous = null)
Пример
Давайте выбросим исключение ItemNotFoundException,
если элемент не найден в массиве:
<?php
namespace AppService;
use SymfonyComponentUidExceptionItemNotFoundException;
class ItemService
{
public function findItem(array $items, string $id): string
{
if (!isset($items[$id])) {
throw new ItemNotFoundException('Item "'.$id.'" not found');
}
return $items[$id];
}
}
?>
Результат выполнения кода для существующего ключа:
"abcde"
Пример
Давайте обработаем исключение ItemNotFoundException
в контроллере и вернём корректный ответ:
<?php
namespace AppController;
use AppServiceItemService;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
use SymfonyComponentUidExceptionItemNotFoundException;
class ItemController extends AbstractController
{
#[Route('/item/{id}', name: 'item_show')]
public function show(string $id, ItemService $service): Response
{
try {
$item = $service->findItem(['a' => 'abcde'], $id);
return new Response($item);
} catch (ItemNotFoundException $e) {
return new Response($e->getMessage(), 404);
}
}
}
?>
Результат выполнения кода для адреса /item/a:
abcde
Результат выполнения кода для адреса /item/x:
Item "x" not found
Смотрите также
-
исключение
NotFoundHttpException,
которое возвращает ответ 404 -
исключение
NoResultException,
которое выбрасывается Doctrine при отсутствии результата -
исключение
EntityNotFoundException,
которое сигнализирует об отсутствии сущности -
класс
FlattenException,
который используется для отображения ошибок