From 3dd206c860f9829b2b5426b8702b7a1973e3dcab Mon Sep 17 00:00:00 2001 From: Franck DAKIA Date: Fri, 26 Dec 2025 12:56:52 +0000 Subject: [PATCH 1/2] Refactoring loader --- src/Configuration/EnvConfiguration.php | 1 + src/Configuration/Loader.php | 50 +++++++++++-------- ...iguration.php => CompassConfiguration.php} | 6 +-- 3 files changed, 32 insertions(+), 25 deletions(-) rename src/Container/{ContainerConfiguration.php => CompassConfiguration.php} (77%) 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..aa06c05e 100644 --- a/src/Configuration/Loader.php +++ b/src/Configuration/Loader.php @@ -10,8 +10,8 @@ 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,37 +175,27 @@ public function boot(): Loader return $this; } - $services = array_merge( - [ContainerConfiguration::class, EnvConfiguration::class], - $this->configurations(), - ); - - $service_collection = []; + $configurations = array_merge([CompassConfiguration::class], $this->configurations()); $container = Capsule::getInstance(); - // Configuration of services - foreach ($services as $service) { - if ($this->without_session && $service === SessionConfiguration::class) { - continue; - } + $this->loadConfiguration(EnvConfiguration::class, $container); - if (!class_exists($service)) { + $loaded_configurations = []; + + // Configuration of services + foreach ($configurations as $configuration) { + if ($this->without_session && $configuration === SessionConfiguration::class) { continue; } - $service_instance = new $service($container); - $service_instance->create($this); - $service_collection[] = $service_instance; - - // Encure that the .env file is loaded before others services - if ($service === EnvConfiguration::class) { - $this->loadEnvfile(); + if (class_exists($configuration)) { + $loaded_configurations[] = $this->loadConfiguration($configuration, $container); } } // Start of services or initial code - foreach ($service_collection as $service) { + foreach ($loaded_configurations as $service) { $service->run(); } @@ -213,7 +203,7 @@ public function boot(): Loader foreach ($this->events() as $name => $handlers) { $handlers = (array) $handlers; foreach ($handlers as $handler) { - Event::on($name, $handler); + app_event($name, $handler); } } @@ -223,6 +213,22 @@ public function boot(): Loader return $this; } + /** + * Load a configuration service + * + * @param string $service + * @param Capsule $container + * @return Configuration + */ + private function loadConfiguration(string $service, Capsule $container): Configuration + { + $service_instance = new $service($container); + + $service_instance->create($this); + + return $service_instance; + } + /** * Load the .env file * 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'); } } From e27a622478f3a3bb4801670315275f7299a9e38c Mon Sep 17 00:00:00 2001 From: Franck DAKIA Date: Fri, 26 Dec 2025 13:11:54 +0000 Subject: [PATCH 2/2] Refactoring config loader --- src/Configuration/Loader.php | 100 ++++++++++++++++++++++++----------- 1 file changed, 69 insertions(+), 31 deletions(-) diff --git a/src/Configuration/Loader.php b/src/Configuration/Loader.php index aa06c05e..cd836c25 100644 --- a/src/Configuration/Loader.php +++ b/src/Configuration/Loader.php @@ -5,7 +5,6 @@ namespace Bow\Configuration; use ArrayAccess; -use Bow\Event\Event; use Bow\Container\Capsule; use Bow\Support\Arraydotify; use Bow\Session\SessionConfiguration; @@ -175,37 +174,21 @@ public function boot(): Loader return $this; } - $configurations = array_merge([CompassConfiguration::class], $this->configurations()); - $container = Capsule::getInstance(); - $this->loadConfiguration(EnvConfiguration::class, $container); - - $loaded_configurations = []; + $this->createConfiguration(EnvConfiguration::class, $container); // Configuration of services - foreach ($configurations as $configuration) { - if ($this->without_session && $configuration === SessionConfiguration::class) { - continue; - } + $loaded_configurations = $this->createConfigurations( + array_merge([CompassConfiguration::class], $this->configurations()), + $container + ); - if (class_exists($configuration)) { - $loaded_configurations[] = $this->loadConfiguration($configuration, $container); - } - } + // Load configurations + $this->runConfirmations($loaded_configurations); - // Start of services or initial code - foreach ($loaded_configurations as $service) { - $service->run(); - } - - // Bind the define events - foreach ($this->events() as $name => $handlers) { - $handlers = (array) $handlers; - foreach ($handlers as $handler) { - app_event($name, $handler); - } - } + // Load load events + $this->loadEvents(); // Set the load as booted $this->booted = true; @@ -216,17 +199,72 @@ public function boot(): Loader /** * Load a configuration service * - * @param string $service + * @param string $configuration_class * @param Capsule $container * @return Configuration */ - private function loadConfiguration(string $service, Capsule $container): 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); + + return $configuration; + } + + /** + * Load configurations + * + * @param array $configurations + * @param Capsule $container + * @return array + */ + private function createConfigurations(array $configurations, Capsule $container): array { - $service_instance = new $service($container); + $loaded_configurations = []; + + foreach ($configurations as $configuration) { + if ($this->without_session && $configuration === SessionConfiguration::class) { + continue; + } + + $loaded_configurations[] = $this->createConfiguration($configuration, $container); + } - $service_instance->create($this); + return $loaded_configurations; + } - return $service_instance; + /** + * Run the loaded configurations + * + * @param array $loaded_configurations + * @return void + */ + private function runConfirmations(array $loaded_configurations): void + { + // Start of services or initial code + 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) { + foreach ((array) $handlers as $handler) { + app_event($name, $handler); + } + } } /**