/** * Helper method for instantiating classes. * * Instantiates the given class if it isn't already an object. Uses the * service container if available. * * @param mixed $class * @param array $arguments [optional] * @return object */ protected function create($class, $arguments) { if (!is_object($class) && class_exists($class)) { if ($this->services) { $class = $this->services->create($class, $arguments); } else { $reflection = new ReflectionClass($class); $class = $reflection->newInstanceArgs($arguments); } } return $class; }
/** * Register a configuration object, and any of its service aliases and * providers, with the container. * * @param Container $container */ public function register(Container $container) { $container->register(array('Darya\\Foundation\\Configuration' => function (Application $application) { $basePath = $application->basePath(); // Load the application's configuration $configuration = new Configuration(array("{$basePath}/config/config.default.php", "{$basePath}/config/config.php")); return $configuration; })); $configuration = $container->resolve('Darya\\Foundation\\Configuration'); // Register the configured aliases foreach ($configuration['aliases'] as $alias => $service) { $container->alias($alias, $service); } // Register the configured service providers if ($container instanceof Application) { foreach ($configuration['services'] as $service) { if (class_exists($service) && is_subclass_of($service, 'Darya\\Service\\Contracts\\Provider')) { $container->provide($container->create($service)); } } } }