/** * Resolve and inject type hinted parameters * * @return array */ protected function resolveActionDependency() { $di = PastryBag::getContainer(); $request = $this->request; $reflector = new \ReflectionMethod($this, $request->params['action']); $parameters = $request->params['pass']; $resolverReflected = null; foreach ($reflector->getParameters() as $key => $param) { if (!isset($parameters[$key])) { $parameters[$key] = null; } $class = $param->getClass(); if ($class && !$parameters[$key] instanceof $class->name) { // No way to access registered types in the Aura.Di container, so we must using reflection if ($resolverReflected === null) { $resolverReflector = new \ReflectionProperty($di, 'resolver'); $resolverReflector->setAccessible(true); $resolverReflected = $resolverReflector->getValue($di); } if (isset($resolverReflected->types[$class->name])) { $instance = $resolverReflected->types[$class->name](); } else { $instance = $di->newInstance($class->name); } array_splice($parameters, $key, 0, [$instance]); } } return $parameters; }
<?php use PastryBag\Di\PastryBag; $diConfig = []; $registryFile = CONFIG . 'container_configs.php'; if (file_exists($registryFile)) { $diConfig += (require_once $registryFile); } $diConfig[] = \PastryBag\Config\Common::class; $di = PastryBag::create($diConfig); PastryBag::setContainer($di);