/** * Resolves Auryn controller dependencies after everything else has been set up correctly * * @see <https://github.com/rdlowrey/Auryn> */ public function resolveAuryn() { $app = $this; $config = $this->config['auryn']; $provider = new Provider(new ReflectionPool()); foreach ($config as $key => $values) { switch ($key) { case $key === 'define': if (!is_null($values)) { array_walk($values, function ($definition, $key) use($provider) { $provider->define($key, $definition); }); } break; case $key === 'delegate': if (!is_null($values)) { array_walk($values, function ($delegate, $object) use($provider) { $provider->delegate($object, $delegate); }); } break; case $key === 'alias': if (!is_null($values)) { array_walk($values, function ($concrete, $interface) use($provider) { $provider->alias($interface, $concrete); }); } break; case $key === 'share': if (!is_null($values)) { array_walk($values, function ($share) use($provider, $app) { $provider->share($app[$share]); }); } break; } } $repositoryFiles = glob(__DIR__ . "/Model/Repository/*Repository.php"); array_walk($repositoryFiles, function ($file) use($app, $provider) { /** @var \Doctrine\ORM\EntityManager $orm */ $orm = $app['orm.em']; $repositoryName = str_replace(['Repository', '.php'], '', basename($file)); $provider->share($orm->getRepository(sprintf('\\App\\Model\\Entity\\%s', $repositoryName))); }); $app['resolver'] = $app->share($app->extend('resolver', function ($resolver, $app) use($provider, $config) { return new AurynControllerResolver($resolver, $provider, $app, $app['request'], $config); })); }