. */ namespace Doctrine\ORM\Mapping\Driver; use Doctrine\ORM\Mapping\Driver\Driver, Doctrine\ORM\Mapping\ClassMetadataInfo, Doctrine\ORM\Mapping\MappingException; /** * The DriverChain allows you to add multiple other mapping drivers for * certain namespaces * * @license http://www.opensource.org/licenses/lgpl-license.php LGPL * @link www.doctrine-project.org * @since 2.0 * @version $Revision$ * @author Benjamin Eberlei * @author Guilherme Blanco * @author Jonathan H. Wage * @author Roman Borschel */ class DriverChain implements Driver { /** * @var array */ private $_drivers = array(); /** * Add a nested driver * * @param Driver $nestedDriver * @param string $namespace */ public function addDriver(Driver $nestedDriver, $namespace) { $this->_drivers[$namespace] = $nestedDriver; } /** * Get the array of nested drivers * * @return array $drivers */ public function getDrivers() { return $this->_drivers; } /** * Loads the metadata for the specified class into the provided container. * * @param string $className * @param ClassMetadataInfo $metadata */ public function loadMetadataForClass($className, ClassMetadataInfo $metadata) { foreach ($this->_drivers AS $namespace => $driver) { if (strpos($className, $namespace) === 0) { $driver->loadMetadataForClass($className, $metadata); return; } } throw MappingException::classIsNotAValidEntityOrMappedSuperClass($className); } /** * Gets the names of all mapped classes known to this driver. * * @return array The names of all mapped classes known to this driver. */ public function getAllClassNames() { $classNames = array(); foreach ($this->_drivers AS $driver) { $classNames = array_merge($classNames, $driver->getAllClassNames()); } return $classNames; } /** * Whether the class with the specified name should have its metadata loaded. * This is only the case if it is either mapped as an Entity or a * MappedSuperclass. * * @param string $className * @return boolean */ public function isTransient($className) { foreach ($this->_drivers AS $namespace => $driver) { if (strpos($className, $namespace) === 0) { return $driver->isTransient($className); } } throw MappingException::classIsNotAValidEntityOrMappedSuperClass($className); } }