/** * 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); } }