Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
50.00% |
1 / 2 |
|
80.00% |
4 / 5 |
CRAP | |
96.30% |
26 / 27 |
| ServiceNotFoundException | |
100.00% |
1 / 1 |
0 | ||||||
| ArgNameDependencyResolver | |
0.00% |
0 / 1 |
|
80.00% |
4 / 5 |
16 | |
96.30% |
26 / 27 |
| __construct($resolutionStrategy) | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
| resolveAllowNoMatch($class, $method, $noMatch = NULL) | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
| resolve($class, $method, $overrides = array()) | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
| _resolve($class, $method, $overrides = array(), $noMatch = NULL, $throwException = false) | |
0.00% |
0 / 1 |
10.01 | |
94.74% |
18 / 19 |
|||
| _getService($serviceName, $className = NULL) | |
100.00% |
1 / 1 |
3 | |
100.00% |
4 / 4 |
|||
| <?php | |
| /** | |
| * | |
| */ | |
| namespace aae\di { | |
| class ServiceNotFoundException extends \Exception {} | |
| /** | |
| * @author Axel Ancona Esselmann | |
| * @package aae\di | |
| */ | |
| class ArgNameDependencyResolver implements DependencyResolverInterface { | |
| private $_rs; | |
| public function __construct($resolutionStrategy) { | |
| $this->_rs = $resolutionStrategy; | |
| } | |
| /** | |
| * Resolves dependencies and for services not found resolves to NULL | |
| */ | |
| public function resolveAllowNoMatch($class, $method, $noMatch = NULL) { | |
| return $this->_resolve($class, $method, [], $noMatch, false); | |
| } | |
| public function resolve($class, $method, $overrides = array()) { | |
| return $this->_resolve($class, $method, $overrides, NULL, true); | |
| } | |
| protected function _resolve($class, $method, $overrides = array(), $noMatch = NULL, $throwException = false) { | |
| if (!is_string($class) && !is_null($class)) throw new \Exception("The class argument has to be of type string. Type '".get_class($class)."' given", 1109141901); | |
| $args = array(); | |
| if (!class_exists($class)) throw new \aae\di\ClassNotDefinedException("Class $class not defined", 1211141019); | |
| try { | |
| $contRefl = new \ReflectionMethod($class, $method); | |
| } catch (\ReflectionException $e) { | |
| throw new \Exception($e->getMessage(), 1109141941); | |
| } | |
| $params = $contRefl->getParameters(); | |
| foreach ($params as $param) { | |
| $paramName = $param->getName(); | |
| foreach ($overrides as $oldParamName => $overRiddenParamName) { | |
| if ($paramName == $oldParamName) $paramName = $overRiddenParamName; | |
| } | |
| try {$paramVal = $this->_getService($paramName);} | |
| catch (ServiceNotFoundException $e) { | |
| if ($throwException) throw $e; | |
| $paramVal = $noMatch; | |
| } | |
| $args[] = $paramVal; | |
| } | |
| return $args; | |
| } | |
| private function _getService($serviceName, $className = NULL) { | |
| if (is_array($this->_rs)) { | |
| if (!array_key_exists($serviceName, $this->_rs)) throw new ServiceNotFoundException ("Could not locate service $serviceName", 1016141128); | |
| return $this->_rs[$serviceName]; | |
| } else { | |
| return $this->_rs->build($serviceName); | |
| } | |
| } | |
| } | |
| } |