/** * @param DnaConfiguration $dna * * @return \Nucleus\IService\DependencyInjection\IServiceContainer */ protected function loadServiceContainer($dna) { $cachePath = $dna->freezeCachePath()->getCachePath(); $class = 'ServiceContainer' . md5($cachePath); $file = $cachePath . '/serviceContainer/' . $class . '.php'; $containerConfigCache = new ConfigCache($file, $dna->getDebug()); $isNew = false; if (!class_exists($class)) { if (!$containerConfigCache->isFresh()) { $container = new ContainerBuilder(); $nucleusCompilerPass = new NucleusCompilerPass($dna); $container->addCompilerPass($nucleusCompilerPass); $container->compile(); $dumper = new PhpDumper($container); $containerConfigCache->write($dumper->dump(array('class' => $class, 'nucleus' => $nucleusCompilerPass->getConfiguration())), $container->getResources()); $isNew = true; } require $file; } $serviceContainer = new $class(); /* @var $serviceContainer \Nucleus\DependencyInjection\BaseServiceContainer */ $serviceContainer->initialize(); if ($isNew) { $serviceContainer->getServiceByName(IEventDispatcherService::NUCLEUS_SERVICE_NAME)->dispatch('ServiceContainer.postDump', $serviceContainer, array('containerBuilder' => $container, 'dnaConfiguration' => $dna)); } return $serviceContainer; }
public function __construct(DnaConfiguration $dna) { $this->dnaConfiguration = $dna; $fileLoader = new ConfigurationFileLoader(); $dna->prependConfiguration(__DIR__ . "/nucleus.json"); $configuration = $fileLoader->load($dna->getConfiguration()); //We set/override the debug value base on the debug in dna configuration //So it can be reuse in the service container $configuration['services']['configuration']['configuration']['debug'] = $dna->getDebug(); $configuration['services']['configuration']['configuration']['cachePath'] = $dna->getCachePath(); $this->dnaConfiguration->setConfiguration($configuration); $this->configuration = $this->dnaConfiguration->getConfiguration(); $this->loaderFiles = $fileLoader->getLoadedFiles(); $this->setDefaultConfiguration(); }