diff --git a/lib/Doctrine/ORM/Configuration.php b/lib/Doctrine/ORM/Configuration.php index d16b22b54..99ee397cc 100644 --- a/lib/Doctrine/ORM/Configuration.php +++ b/lib/Doctrine/ORM/Configuration.php @@ -516,4 +516,31 @@ class Configuration extends \Doctrine\DBAL\Configuration } return $this->_attributes['classMetadataFactoryName']; } + + /** + * Set default repository class. + * + * @since 2.2 + * @param string $className + * @throws ORMException If not implements Doctrine\Common\Persistence\ObjectRepository + */ + public function setDefaultRepositoryClassName($className) + { + if (!is_subclass_of($className, 'Doctrine\Common\Persistence\ObjectRepository')) { + throw ORMException::invalidObjectRepository($className); + } + $this->_attributes['defaultRepositoryClassName'] = $className; + } + + /** + * Get default repository class. + * + * @since 2.2 + * @return string + */ + public function getDefaultRepositoryClassName() + { + return isset($this->_attributes['defaultRepositoryClassName']) ? + $this->_attributes['defaultRepositoryClassName'] : 'Doctrine\ORM\EntityRepository'; + } } \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php b/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php index 17255cb23..e34db3f2d 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php @@ -1519,12 +1519,17 @@ class ClassMetadataInfo implements ClassMetadata * Registers a custom repository class for the entity class. * * @param string $mapperClassName The class name of the custom mapper. + * @throws MappingException If not implements Doctrine\Common\Persistence\ObjectRepository */ public function setCustomRepositoryClass($repositoryClassName) { if ($repositoryClassName !== null && strpos($repositoryClassName, '\\') === false && strlen($this->namespace) > 0) { $repositoryClassName = $this->namespace . '\\' . $repositoryClassName; + + if (!is_subclass_of($repositoryClassName, 'Doctrine\Common\Persistence\ObjectRepository')) { + throw MappingException::invalidObjectRepository($repositoryClassName); + } } $this->customRepositoryClassName = $repositoryClassName; } diff --git a/lib/Doctrine/ORM/ORMException.php b/lib/Doctrine/ORM/ORMException.php index 89203359c..c1115c260 100644 --- a/lib/Doctrine/ORM/ORMException.php +++ b/lib/Doctrine/ORM/ORMException.php @@ -130,4 +130,9 @@ class ORMException extends Exception "Unknown Entity namespace alias '$entityNamespaceAlias'." ); } + + public static function invalidObjectRepository($className) { + return new self("Invalid repository class '".$className."'. ". + "it must implement Doctrine\Common\Persistence\ObjectRepository."); + } }