diff --git a/src/Configuration/EnvConfiguration.php b/src/Configuration/EnvConfiguration.php index fd96a112..f4dd4d7d 100644 --- a/src/Configuration/EnvConfiguration.php +++ b/src/Configuration/EnvConfiguration.php @@ -14,6 +14,7 @@ class EnvConfiguration extends Configuration public function create(Loader $config): void { Env::configure(base_path('.env.json')); + $event = Env::getInstance(); $this->container->instance('env', $event); diff --git a/src/Configuration/Loader.php b/src/Configuration/Loader.php index 8bc959fc..cd836c25 100644 --- a/src/Configuration/Loader.php +++ b/src/Configuration/Loader.php @@ -5,13 +5,12 @@ namespace Bow\Configuration; use ArrayAccess; -use Bow\Event\Event; use Bow\Container\Capsule; use Bow\Support\Arraydotify; use Bow\Session\SessionConfiguration; use Bow\Configuration\EnvConfiguration; -use Bow\Container\ContainerConfiguration; use Bow\Application\Exception\ApplicationException; +use Bow\Container\CompassConfiguration; class Loader implements ArrayAccess { @@ -175,52 +174,97 @@ public function boot(): Loader return $this; } - $services = array_merge( - [ContainerConfiguration::class, EnvConfiguration::class], - $this->configurations(), + $container = Capsule::getInstance(); + + $this->createConfiguration(EnvConfiguration::class, $container); + + // Configuration of services + $loaded_configurations = $this->createConfigurations( + array_merge([CompassConfiguration::class], $this->configurations()), + $container ); - $service_collection = []; + // Load configurations + $this->runConfirmations($loaded_configurations); - $container = Capsule::getInstance(); + // Load load events + $this->loadEvents(); - // Configuration of services - foreach ($services as $service) { - if ($this->without_session && $service === SessionConfiguration::class) { - continue; - } + // Set the load as booted + $this->booted = true; - if (!class_exists($service)) { - continue; - } + return $this; + } + + /** + * Load a configuration service + * + * @param string $configuration_class + * @param Capsule $container + * @return Configuration + */ + private function createConfiguration(string $configuration_class, Capsule $container): Configuration + { + if (!class_exists($configuration_class)) { + throw new ApplicationException("The configuration class {$configuration_class} does not exists."); + } + + $configuration = new $configuration_class($container); + + $configuration->create($this); - $service_instance = new $service($container); - $service_instance->create($this); - $service_collection[] = $service_instance; + return $configuration; + } + + /** + * Load configurations + * + * @param array $configurations + * @param Capsule $container + * @return array + */ + private function createConfigurations(array $configurations, Capsule $container): array + { + $loaded_configurations = []; - // Encure that the .env file is loaded before others services - if ($service === EnvConfiguration::class) { - $this->loadEnvfile(); + foreach ($configurations as $configuration) { + if ($this->without_session && $configuration === SessionConfiguration::class) { + continue; } + + $loaded_configurations[] = $this->createConfiguration($configuration, $container); } + return $loaded_configurations; + } + + /** + * Run the loaded configurations + * + * @param array $loaded_configurations + * @return void + */ + private function runConfirmations(array $loaded_configurations): void + { // Start of services or initial code - foreach ($service_collection as $service) { + foreach ($loaded_configurations as $service) { $service->run(); } + } + /** + * Load events + * + * @return void + */ + private function loadEvents(): void + { // Bind the define events foreach ($this->events() as $name => $handlers) { - $handlers = (array) $handlers; - foreach ($handlers as $handler) { - Event::on($name, $handler); + foreach ((array) $handlers as $handler) { + app_event($name, $handler); } } - - // Set the load as booted - $this->booted = true; - - return $this; } /** diff --git a/src/Container/ContainerConfiguration.php b/src/Container/CompassConfiguration.php similarity index 77% rename from src/Container/ContainerConfiguration.php rename to src/Container/CompassConfiguration.php index c709c1f9..115f3c97 100644 --- a/src/Container/ContainerConfiguration.php +++ b/src/Container/CompassConfiguration.php @@ -7,7 +7,7 @@ use Bow\Configuration\Configuration; use Bow\Configuration\Loader; -class ContainerConfiguration extends Configuration +class CompassConfiguration extends Configuration { /** * @var array @@ -21,7 +21,7 @@ class ContainerConfiguration extends Configuration */ public function create(Loader $config): void { - $this->container->bind('container', function () use ($config) { + $this->container->bind('compass', function () use ($config) { $middlewares = array_merge($config->getMiddlewares(), $this->middlewares); return Compass::configure($config->namespaces(), $middlewares); @@ -33,6 +33,6 @@ public function create(Loader $config): void */ public function run(): void { - $this->container->make('action'); + $this->container->make('compass'); } }