Example #1
0
 /**
  * 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;
 }
Example #2
0
<?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);