예제 #1
0
 /**
  * Processes configuration data
  *
  * @throws \Nette\InvalidStateException
  */
 public function loadConfiguration()
 {
     $this->verifyDoctrineVersion();
     $config = $this->getConfig($this->defaults);
     $builder = $this->getContainerBuilder();
     // process custom doctrine services
     \Nette\Config\Compiler::parseServices($builder, $config, $this->name);
     $cache = $builder->addDefinition($this->prefix('cache'))->setClass('Nella\\Doctrine\\Cache', array('@cacheStorage'));
     if ($config['debugger'] === NULL) {
         $config['debugger'] = $builder->parameters['debugMode'];
     }
     if ($config['proxy']['autogenerate'] === NULL) {
         $config['proxy']['autogenerate'] = $builder->parameters['debugMode'];
     }
     $evm = $builder->addDefinition($this->prefix('eventManager'))->setClass('Doctrine\\Common\\EventManager')->addSetup(get_called_class() . '::setupEventManager', array('@self', '@container'));
     if (isset($config['eventManager']) && $config['eventManager']) {
         $evm->setFactory($config['eventManager']);
     }
     $connection = $builder->addDefinition($this->prefix('connection'))->setClass('Doctrine\\DBAL\\Connection')->setFactory(get_called_class() . '::createConnection', array($config, $evm));
     $metadataDriver = $builder->addDefinition($this->prefix('metadataDriver'));
     if (empty($config['metadataDriver'])) {
         if ($config['annotationCacheDriver'] === TRUE) {
             $config['annotationCacheDriver'] = $cache;
         }
         $reader = $builder->addDefinition($this->prefix('annotationReader'))->setClass('Doctrine\\Common\\Annotations\\Reader')->setFactory(get_called_class() . '::createAnnotationReader', array($config['annotationCacheDriver'], $config['useSimpleAnnotation']));
         $builder->addDefinition('discriminatorDiscovery')->setClass('Nella\\Doctrine\\Listeners\\DiscriminatorMapDiscovery', array($reader))->addTag(static::EVENT_TAG_NAME);
         $metadataDriver->setClass('Doctrine\\ORM\\Mapping\\Driver\\AnnotationDriver', array($reader, $config['entityDirs']));
     } else {
         $metadataDriver->setClass('Doctrine\\Common\\Persistence\\Mapping\\Driver\\MappingDriver')->setFactory($config['metadataDriver']);
     }
     $configuration = $builder->addDefinition($this->prefix('configuration'))->setClass('Doctrine\\ORM\\Configuration')->addSetup('setMetadataDriverImpl', array($metadataDriver))->addSetup('setDefaultRepositoryClassName', array($config['repositoryClass']))->addSetup('setProxyDir', array($config['proxy']['dir']))->addSetup('setProxyNamespace', array($config['proxy']['namespace']))->addSetup('setAutoGenerateProxyClasses', array($config['proxy']['autogenerate']));
     if ($config['metadataCacheDriver']) {
         $configuration->addSetup('setMetadataCacheImpl', array($config['metadataCacheDriver'] === TRUE ? $cache : $config['metadataCacheDriver']));
     }
     if ($config['queryCacheDriver']) {
         $configuration->addSetup('setQueryCacheImpl', array($config['queryCacheDriver'] === TRUE ? $cache : $config['queryCacheDriver']));
     }
     if ($config['resultCacheDriver']) {
         $configuration->addSetup('setResultCacheImpl', array($config['resultCacheDriver'] === TRUE ? $cache : $config['resultCacheDriver']));
     }
     $entityManager = $builder->addDefinition($this->prefix('entityManager'))->setClass('Doctrine\\ORM\\EntityManager')->setFactory('Doctrine\\ORM\\EntityManager::create', array($connection, $configuration, $evm));
     if (isset($config['console']) && $config['console']) {
         $this->processConsole($entityManager, $connection);
     }
 }