Source of file Config.php
Size: 7,930 Bytes - Last Modified: 2014-03-12T23:21:18+01:00
/home/theseer/Downloads/ZendFramework-2.3.0/library/Zend/Di/Config.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 | <?php /** * Zend Framework (http://framework.zend.com/) * * @link http://github.com/zendframework/zf2 for the canonical source repository * @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License */ namespace Zend\Di; use Traversable; use Zend\Di\Definition\ArrayDefinition; use Zend\Di\Definition\RuntimeDefinition; use Zend\Stdlib\ArrayUtils; /** * Configures Di instances */ class Config { /** * @var array */ protected $data = array(); /** * Constructor * * @param array|Traversable $options * @throws Exception\InvalidArgumentException */ public function __construct($options) { if ($options instanceof Traversable) { $options = ArrayUtils::iteratorToArray($options); } if (!is_array($options)) { throw new Exception\InvalidArgumentException( 'Config data must be of type Traversable or an array' ); } $this->data = $options; } /** * Configure * * @param Di $di * @return void */ public function configure(Di $di) { if (isset($this->data['definition'])) { $this->configureDefinition($di, $this->data['definition']); } if (isset($this->data['instance'])) { $this->configureInstance($di, $this->data['instance']); } } /** * @param Di $di * @param array $definition */ public function configureDefinition(Di $di, $definition) { foreach ($definition as $definitionType => $definitionData) { switch ($definitionType) { case 'compiler': foreach ($definitionData as $filename) { if (is_readable($filename)) { $di->definitions()->addDefinition(new ArrayDefinition(include $filename), false); } } break; case 'runtime': if (isset($definitionData['enabled']) && !$definitionData['enabled']) { // Remove runtime from definition list if not enabled $definitions = array(); foreach ($di->definitions() as $definition) { if (!$definition instanceof RuntimeDefinition) { $definitions[] = $definition; } } $definitionList = new DefinitionList($definitions); $di->setDefinitionList($definitionList); } elseif (isset($definitionData['use_annotations']) && $definitionData['use_annotations']) { /* @var $runtimeDefinition Definition\RuntimeDefinition */ $runtimeDefinition = $di ->definitions() ->getDefinitionByType('\Zend\Di\Definition\RuntimeDefinition'); $runtimeDefinition->getIntrospectionStrategy()->setUseAnnotations(true); } break; case 'class': foreach ($definitionData as $className => $classData) { $classDefinitions = $di->definitions()->getDefinitionsByType('Zend\Di\Definition\ClassDefinition'); foreach ($classDefinitions as $classDefinition) { if (!$classDefinition->hasClass($className)) { unset($classDefinition); } } if (!isset($classDefinition)) { $classDefinition = new Definition\ClassDefinition($className); $di->definitions()->addDefinition($classDefinition, false); } foreach ($classData as $classDefKey => $classDefData) { switch ($classDefKey) { case 'instantiator': $classDefinition->setInstantiator($classDefData); break; case 'supertypes': $classDefinition->setSupertypes($classDefData); break; case 'methods': case 'method': foreach ($classDefData as $methodName => $methodInfo) { if (isset($methodInfo['required'])) { $classDefinition->addMethod($methodName, $methodInfo['required']); unset($methodInfo['required']); } foreach ($methodInfo as $paramName => $paramInfo) { $classDefinition->addMethodParameter($methodName, $paramName, $paramInfo); } } break; default: $methodName = $classDefKey; $methodInfo = $classDefData; if (isset($classDefData['required'])) { $classDefinition->addMethod($methodName, $methodInfo['required']); unset($methodInfo['required']); } foreach ($methodInfo as $paramName => $paramInfo) { $classDefinition->addMethodParameter($methodName, $paramName, $paramInfo); } } } } } } } /** * Configures a given Di instance * * @param Di $di * @param $instanceData */ public function configureInstance(Di $di, $instanceData) { $im = $di->instanceManager(); foreach ($instanceData as $target => $data) { switch (strtolower($target)) { case 'aliases': case 'alias': foreach ($data as $n => $v) { $im->addAlias($n, $v); } break; case 'preferences': case 'preference': foreach ($data as $n => $v) { if (is_array($v)) { foreach ($v as $v2) { $im->addTypePreference($n, $v2); } } else { $im->addTypePreference($n, $v); } } break; default: foreach ($data as $n => $v) { switch ($n) { case 'parameters': case 'parameter': $im->setParameters($target, $v); break; case 'injections': case 'injection': $im->setInjections($target, $v); break; case 'shared': case 'share': $im->setShared($target, $v); break; } } } } } } |