Пример #1
0
 /**
  * Create and return abstract factory seeded by dependency injector
  *
  * Creates and returns an abstract factory seeded by the dependency
  * injector. If the "di" key of the configuration service is set, that
  * sub-array is passed to a DiConfig object and used to configure
  * the DI instance. The DI instance is then used to seed the
  * DiAbstractServiceFactory, which is then registered with the service
  * manager.
  *
  * @param  ServiceLocatorInterface $serviceLocator
  * @return Di
  */
 public function createService(ServiceLocatorInterface $serviceLocator)
 {
     $di = new Di();
     $config = $serviceLocator->get('Config');
     if (isset($config['di'])) {
         $config = new Config($config['di']);
         $config->configure($di);
     }
     return $di;
 }
 public function testWillFetchDependenciesFromServiceManagerBeforeDi()
 {
     $controllerName = __NAMESPACE__ . '\\TestAsset\\ControllerWithDependencies';
     $config = new Config(array('instance' => array($controllerName => array('parameters' => array('injected' => 'stdClass')))));
     $locator = new ServiceManager();
     $testService = new \stdClass();
     $locator->setService('stdClass', $testService);
     $di = new Di();
     $config->configure($di);
     $instance = new DiStrictAbstractServiceFactory($di, DiStrictAbstractServiceFactory::USE_SL_BEFORE_DI);
     $instance->setAllowedServiceNames(array($controllerName));
     $service = $instance->createServiceWithName($locator, $controllerName, $controllerName);
     $this->assertSame($testService, $service->injectedValue);
 }
Пример #3
0
 /**
  * {@inheritDoc}
  */
 public function createService(ServiceLocatorInterface $serviceLocator)
 {
     $config = $serviceLocator->get('Config');
     if (empty($config['di']['cache'])) {
         return parent::createService($serviceLocator);
     }
     $definition = new CachedRuntimeDefinition();
     foreach ((array) $config['di']['cache'] as $name => $value) {
         switch (strtolower($name)) {
             case 'mincount':
             case 'min_count':
             case 'cachemincount':
             case 'cache_min_count':
                 $definition->setCacheMinCount($value);
                 break;
             case 'minhitrate':
             case 'min_hitrate':
             case 'cacheminhitrate':
             case 'cache_min_hitrate':
                 $definition->setCacheMinHitrate($value);
                 break;
             case 'storage':
             case 'cachestorage':
             case 'cache_storage':
                 $value = (array) $value;
                 if (empty($value['adapter']['options']['namespace'])) {
                     $namespace = get_class($definition);
                 } else {
                     $namespace = $value['adapter']['options']['namespace'];
                 }
                 $namespace = trim(preg_replace(array('#\\\\+#', '#[^a-z0-9_-]+#'), array('-', '_'), strtolower($namespace)), '-');
                 $value['adapter']['options']['namespace'] = $namespace;
                 $storage = StorageFactory::factory($value);
                 $definition->setCacheStorage($storage);
                 break;
         }
     }
     $di = new Di(new DefinitionList($definition));
     $diConfig = new Config($config['di']);
     $diConfig->configure($di);
     return $di;
 }
Пример #4
0
 /**
  * Provide a configuration object to configure this instance
  *
  * @param  Config $config
  * @return void
  */
 public function configure(Config $config)
 {
     $config->configure($this);
 }
Пример #5
0
 /**
  * Load DI configuration for specified config area
  *
  * @param array $configuration
  * @return Magento_ObjectManager_Zend
  */
 public function setConfiguration(array $configuration = array())
 {
     if (isset($configuration['preferences']) && is_array($configuration['preferences'])) {
         $this->_unsetOldPreferences($configuration['preferences']);
     }
     $diConfiguration = new Config(array('instance' => $configuration));
     $diConfiguration->configure($this->_di);
     return $this;
 }
Пример #6
0
 /**
  * @group nullargs
  */
 public function testNullArgumentsResultInEmptyMethodParameterList()
 {
     $this->markTestIncomplete('Null arguments are currently unsupported');
     $opt = new Builder\PhpClass();
     $opt->setName('ZendTest\\Di\\TestAsset\\OptionalArg');
     $optCtor = new Builder\InjectionMethod();
     $optCtor->setName('__construct')->addParameter('param', null);
     $optInject = new Builder\InjectionMethod();
     $optInject->setName('inject')->addParameter('param1', null)->addParameter('param2', null);
     $opt->addInjectionMethod($optCtor)->addInjectionMethod($optInject);
     $def = new Definition();
     $def->addClass($opt);
     $this->di->setDefinition($def);
     $cfg = new Config(array('instance' => array('alias' => array('optional' => 'ZendTest\\Di\\TestAsset\\OptionalArg')), 'properties' => array('ZendTest\\Di\\TestAsset\\OptionalArg' => array('param' => null, 'param1' => null, 'param2' => null))));
     $cfg->configure($this->di);
     $builder = new ContainerGenerator($this->di);
     $builder->setContainerClass('Container');
     $codeGen = $builder->getCodeGenerator();
     $classBody = $codeGen->generate();
     $this->assertNotContains('NULL)', $classBody, $classBody);
 }
Пример #7
0
 /**
  * Load DI configuration for specified config area
  *
  * @param string $areaCode
  * @return Magento_ObjectManager_Zend
  */
 public function loadAreaConfiguration($areaCode = null)
 {
     if (!$areaCode) {
         $areaCode = self::CONFIGURATION_AREA;
     }
     /** @var $magentoConfiguration Mage_Core_Model_Config */
     $magentoConfiguration = $this->get('Mage_Core_Model_Config');
     $node = $magentoConfiguration->getNode($areaCode . '/' . self::CONFIGURATION_DI_NODE);
     if ($node) {
         $diConfiguration = new Config(array('instance' => $node->asArray()));
         $diConfiguration->configure($this->_di);
     }
     return $this;
 }
Пример #8
0
 public function configureDi(AbstractTestCase $testCase)
 {
     if (!$this->testCaseConfigurationObject instanceof TestCaseConfiguration) {
         if ($testCase->getDi() instanceof Di) {
             $testCaseConfiguration = $testCase->get($this->testCaseConfiguration);
             if ($testCaseConfiguration instanceof TestCaseConfiguration) {
                 $this->testCaseConfigurationObject = $testCaseConfiguration;
             }
         } else {
             $this->testCaseConfigurationObject = new $this->testCaseConfiguration($this->configurationProvider, new DefaultPropertyCollector());
         }
     }
     if ($testCase->getDi() instanceof Di) {
         return;
     }
     /* @var $configuration TestCaseConfiguration */
     $configArray = $this->getDefaultConfiguration();
     $count = 0;
     $path = realpath(__DIR__ . '/../');
     while ($count++ < 5) {
         $dir = "{$path}/configuration/";
         if (is_dir($dir)) {
             foreach (glob($dir . '*.php') as $file) {
                 $configArray = array_merge_recursive($configArray, include $file);
             }
             break;
         }
         $path .= '/../';
     }
     $configArray = $this->testCaseConfigurationObject->reprocessConfiguration($configArray);
     $configuration = new Config($configArray);
     $di = new Di();
     $configuration->configure($di);
     $testCase->setDi($di);
     $di->instanceManager()->addSharedInstance($di, Di::class);
     $this->setConfigurationProvider($testCase);
 }
Пример #9
0
 /**
  * @param $config
  * @param null|Di $di
  * @return string
  */
 protected function getDiDefinitions($config, Di $di = null)
 {
     ErrorHandler::start();
     if ($arrayDefinitions = (include $config['ocra_di_compiler']['compiled_di_definitions_filename'])) {
         ErrorHandler::stop();
         return $config['ocra_di_compiler']['compiled_di_definitions_filename'];
     }
     ErrorHandler::stop();
     if (!$di) {
         $di = new Di();
         if (isset($config['di'])) {
             $diConfig = new DiConfig($config['di']);
             $diConfig->configure($di);
         }
     }
     $dumper = new Dumper($di);
     $definitionsCompiler = new ClassListCompilerDefinition();
     $definitionsCompiler->addClassesToProcess($dumper->getAllClasses());
     $definitionsCompiler->compile();
     $fileGenerator = new FileGenerator();
     $fileGenerator->setFilename($config['ocra_di_compiler']['compiled_di_definitions_filename']);
     $fileGenerator->setBody('return ' . var_export($definitionsCompiler->toArrayDefinition()->toArray(), true) . ';');
     $fileGenerator->write();
     return $config['ocra_di_compiler']['compiled_di_definitions_filename'];
 }