/** * Get the extended driver instance which will * read the metadata required by extension * * @param ORMDriver $ormDriver * @throws DriverException if driver was not found in extension * @return Gedmo\Mapping\Driver */ private function _getDriver(ORMDriver $ormDriver) { $driver = null; if ($ormDriver instanceof \Doctrine\ORM\Mapping\Driver\DriverChain) { $driver = new Driver\Chain(); foreach ($ormDriver->getDrivers() as $namespace => $nestedOrmDriver) { $driver->addDriver($this->_getDriver($nestedOrmDriver), $namespace); } } else { $className = get_class($ormDriver); $driverName = substr($className, strrpos($className, '\\') + 1); $driverName = substr($driverName, 0, strpos($driverName, 'Driver')); // create driver instance $driverClassName = $this->_extensionNamespace . '\\Mapping\\Driver\\' . $driverName; if (!class_exists($driverClassName)) { throw DriverException::extensionDriverNotSupported($driverClassName, $driverName); } $driver = new $driverClassName(); if ($driver instanceof \Gedmo\Mapping\Driver\File) { $driver->setPaths($ormDriver->getPaths()); } } return $driver; }