From 719e05e53e9e376c7d4138a1d20070ece2cfc57b Mon Sep 17 00:00:00 2001 From: Benjamin Eberlei Date: Sat, 22 Oct 2011 12:57:55 +0200 Subject: [PATCH] Extract more messages into ORMInvalidArgumentException --- .../ORM/ORMInvalidArgumentException.php | 20 +++++++++++++++++++ lib/Doctrine/ORM/UnitOfWork.php | 14 ++++++------- 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/lib/Doctrine/ORM/ORMInvalidArgumentException.php b/lib/Doctrine/ORM/ORMInvalidArgumentException.php index a4a03c41a..878ee4b71 100644 --- a/lib/Doctrine/ORM/ORMInvalidArgumentException.php +++ b/lib/Doctrine/ORM/ORMInvalidArgumentException.php @@ -19,6 +19,11 @@ namespace Doctrine\ORM; +/** + * Contains exception messages for all invalid lifecycle state exceptions inside UnitOfWork + * + * @author Benjamin Eberlei + */ class ORMInvalidArgumentException extends \InvalidArgumentException { static public function scheduleInsertForManagedEntity($entity) @@ -74,6 +79,21 @@ class ORMInvalidArgumentException extends \InvalidArgumentException "from the database or registered as new through EntityManager#persist"); } + static public function entityHasNoIdentity($entity, $operation) + { + throw new self("Entity has no identity, therefore " . $operation ." cannot be performed. " . self::objToStr($entity)); + } + + static public function entityIsRemoved($entity, $operation) + { + throw new self("Entity is removed, therefore " . $operation ." cannot be performed. " . self::objToStr($entity)); + } + + static public function detachedEntityCannot($entity, $operation) + { + throw new self("A detached entity was found during " . $operation . " " . self::objToStr($entity)); + } + /** * Helper method to show an object as string. * diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index a80079041..e4168a1a0 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -935,10 +935,10 @@ class UnitOfWork implements PropertyChangedListener { $oid = spl_object_hash($entity); if ( ! isset($this->entityIdentifiers[$oid])) { - throw new InvalidArgumentException("Entity has no identity." . self::objToStr($entity)); + throw ORMInvalidArgumentException::entityHasNoIdentity($entity, "scheduling for update"); } if (isset($this->entityDeletions[$oid])) { - throw new InvalidArgumentException("Entity is removed." . self::objToStr($entity)); + throw ORMInvalidArgumentException::entityIsRemoved($entity, "schedule for update"); } if ( ! isset($this->entityUpdates[$oid]) && ! isset($this->entityInsertions[$oid])) { @@ -1160,7 +1160,7 @@ class UnitOfWork implements PropertyChangedListener $classMetadata = $this->em->getClassMetadata(get_class($entity)); $idHash = implode(' ', $this->entityIdentifiers[$oid]); if ($idHash === '') { - throw new InvalidArgumentException("The given entity has no identity." . self::objToStr($entity)); + throw ORMInvalidArgumentException::entityHasNoIdentity($entity, "remove from identity map"); } $className = $classMetadata->rootEntityName; if (isset($this->identityMap[$className][$idHash])) { @@ -1291,7 +1291,7 @@ class UnitOfWork implements PropertyChangedListener break; case self::STATE_DETACHED: // Can actually not happen right now since we assume STATE_NEW. - throw new InvalidArgumentException("Detached entity passed to persist()." . self::objToStr($entity)); + throw ORMInvalidArgumentException::detachedEntityCannot($entity, "persisted"); default: throw new UnexpectedValueException("Unexpected entity state: $entityState." . self::objToStr($entity)); } @@ -1350,7 +1350,7 @@ class UnitOfWork implements PropertyChangedListener $this->scheduleForDelete($entity); break; case self::STATE_DETACHED: - throw new InvalidArgumentException("A detached entity can not be removed." . self::objToStr($entity)); + throw ORMInvalidArgumentException::detachedEntityCannot($entity, "removed"); default: throw new UnexpectedValueException("Unexpected entity state: $entityState." . self::objToStr($entity)); } @@ -1417,9 +1417,7 @@ class UnitOfWork implements PropertyChangedListener if ($managedCopy) { // We have the entity in-memory already, just make sure its not removed. if ($this->getEntityState($managedCopy) == self::STATE_REMOVED) { - throw new InvalidArgumentException( - 'Removed entity ' . self::objToStr($managedCopy) . ' detected during merge.' - . ' Can not merge with a removed entity.'); + throw ORMInvalidArgumentException::entityIsRemoved($managedCopy, "merge"); } } else { // We need to fetch the managed copy in order to merge.