РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
548 of 1361 menu

Исключение ORMInvalidArgumentException

Исключение ORMInvalidArgumentException относится к классу Doctrine\ORM\ORMInvalidArgumentException и наследуется от стандартного InvalidArgumentException языка PHP. Оно выбрасывается ORM-слоем Doctrine, когда в методы EntityManager, UnitOfWork или репозитория передаются некорректные аргументы: null вместо сущности, массив без обязательных ключей, объект неподходящего типа или сущность без настроенного маппинга. Чаще всего исключение возникает при вызове методов persist, remove, merge, refresh и find. Сообщение исключения содержит подсказку о том, какой именно аргумент был передан неверно.

Синтаксис

<?php namespace Doctrine\ORM; class ORMInvalidArgumentException extends \InvalidArgumentException { public static function newInvalidArgumentException(string $message): self; public static function entityNotManaged(object $entity): self; public static function entityHasNoIdentity(object $entity, string $operation): self; public static function invalidFlushMode(string $mode): self; public static function invalidOrientation(string $orientation): self; public static function invalidHydrationMode(string $mode): self; public static function newInvalidArgumentExceptionWithEntities(string $message, array $entities): self; } ?>

Пример

Давайте попробуем передать в метод persist не сущность, а обычную строку и поймаем исключение:

<?php namespace App\Controller; use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\ORMInvalidArgumentException; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; class ArticleController extends AbstractController { public function index(EntityManagerInterface $em): Response { try { $em->persist('abcde'); } catch (ORMInvalidArgumentException $e) { return new Response($e->getMessage()); } return new Response('ok'); } } ?>

Результат выполнения кода:

"Entity passed to persist() is not a valid entity object. Got string"

Пример

Давайте попробуем вызвать remove для сущности, которая не управляется текущим EntityManager:

<?php namespace App\Controller; use App\Entity\Article; use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\ORMInvalidArgumentException; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; class ArticleController extends AbstractController { public function index(EntityManagerInterface $em): Response { $article = new Article(); try { $em->remove($article); } catch (ORMInvalidArgumentException $e) { return new Response($e->getMessage()); } return new Response('ok'); } } ?>

Результат выполнения кода:

"Removal of an entity that is not managed by this EntityManager is not allowed. Entity App\Entity\Article is not managed"

Пример

Давайте обработаем исключение и вернём пользователю понятный ответ через JSON:

<?php namespace App\Controller; use App\Entity\Article; use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\ORMInvalidArgumentException; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\JsonResponse; class ArticleController extends AbstractController { public function index(EntityManagerInterface $em): JsonResponse { $article = new Article(); $article->setTitle('abcde'); try { $em->persist($article); $em->flush(); } catch (ORMInvalidArgumentException $e) { return new JsonResponse([ 'error' => 'orm_invalid_argument', 'message' => $e->getMessage(), ], 400); } return new JsonResponse(['status' => 'created']); } } ?>

Результат выполнения кода при корректных данных:

{"status":"created"}

Смотрите также

  • исключение EntityNotFoundException,
    которое выбрасывается, когда сущность не найдена
  • исключение UniqueConstraintViolationException,
    которое возникает при нарушении уникального индекса
  • исключение InvalidArgumentException,
    родительский класс для ORMInvalidArgumentException
  • класс FlattenException,
    который сериализует исключения для ответа
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить