/**
  * 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;
 }
Ejemplo n.º 3
0
 /**
  * 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;
 }