/** * Get the extended driver instance which will * read the metadata required by extension * * @param object $omDriver * @throws \Gedmo\Exception\RuntimeException if driver was not found in extension * @return \Gedmo\Mapping\Driver */ protected function getDriver($omDriver) { $driver = null; $className = get_class($omDriver); $driverName = substr($className, strrpos($className, '\\') + 1); if ($omDriver instanceof MappingDriverChain || $driverName == 'DriverChain') { $driver = new Driver\Chain(); foreach ($omDriver->getDrivers() as $namespace => $nestedOmDriver) { $driver->addDriver($this->getDriver($nestedOmDriver), $namespace); } if (version_compare(CommonLibVer::VERSION, '2.3.0', '>=') && $omDriver->getDefaultDriver() !== null) { $driver->setDefaultDriver($this->getDriver($omDriver->getDefaultDriver())); } } else { $driverName = substr($driverName, 0, strpos($driverName, 'Driver')); $isSimplified = false; if (substr($driverName, 0, 10) === 'Simplified') { // support for simplified file drivers $driverName = substr($driverName, 10); $isSimplified = true; } // create driver instance $driverClassName = $this->extensionNamespace . '\\Mapping\\Driver\\' . $driverName; if (!class_exists($driverClassName)) { $driverClassName = $this->extensionNamespace . '\\Mapping\\Driver\\Annotation'; if (!class_exists($driverClassName)) { throw new \Gedmo\Exception\RuntimeException("Failed to fallback to annotation driver: ({$driverClassName}), extension driver was not found."); } } $driver = new $driverClassName(); $driver->setOriginalDriver($omDriver); if ($driver instanceof FileDriver) { /** @var $driver FileDriver */ if ($omDriver instanceof MappingDriver) { $driver->setLocator($omDriver->getLocator()); // BC for Doctrine 2.2 } elseif ($isSimplified) { $driver->setLocator(new SymfonyFileLocator($omDriver->getNamespacePrefixes(), $omDriver->getFileExtension())); } else { $driver->setLocator(new DefaultFileLocator($omDriver->getPaths(), $omDriver->getFileExtension())); } } if ($driver instanceof AnnotationDriverInterface) { $driver->setAnnotationReader($this->annotationReader); } } return $driver; }
/** * Get the extended driver instance which will * read the metadata required by extension * * @param object $omDriver * @throws DriverException if driver was not found in extension * @return Gedmo\Mapping\Driver */ private function getDriver($omDriver) { $driver = null; $className = get_class($omDriver); $driverName = substr($className, strrpos($className, '\\') + 1); if ($driverName == 'DriverChain') { $driver = new Driver\Chain(); foreach ($omDriver->getDrivers() as $namespace => $nestedOmDriver) { $driver->addDriver($this->getDriver($nestedOmDriver), $namespace); } } else { $driverName = substr($driverName, 0, strpos($driverName, 'Driver')); if (substr($driverName, 0, 10) === 'Simplified') { // support for simplified file drivers $driverName = substr($driverName, 10); } // create driver instance $driverClassName = $this->extensionNamespace . '\\Mapping\\Driver\\' . $driverName; if (!class_exists($driverClassName)) { $driverClassName = $this->extensionNamespace . '\\Mapping\\Driver\\Annotation'; if (!class_exists($driverClassName)) { throw new \Gedmo\Exception\RuntimeException("Failed to fallback to annotation driver: ({$driverClassName}), extension driver was not found."); } } $driver = new $driverClassName(); $driver->setOriginalDriver($omDriver); if ($driver instanceof FileDriver) { $driver->setPaths($omDriver->getPaths()); $driver->setExtension($omDriver->getFileExtension()); } if ($driver instanceof AnnotationDriverInterface) { $driver->setAnnotationReader($this->annotationReader); } } return $driver; }
/** * 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; }