Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/Configuration/EnvConfiguration.php
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
104 changes: 74 additions & 30 deletions src/Configuration/Loader.php
Original file line number Diff line number Diff line change
Expand Up @@ -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
{
Expand Down Expand Up @@ -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;
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
use Bow\Configuration\Configuration;
use Bow\Configuration\Loader;

class ContainerConfiguration extends Configuration
class CompassConfiguration extends Configuration
{
/**
* @var array
Expand All @@ -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);
Expand All @@ -33,6 +33,6 @@ public function create(Loader $config): void
*/
public function run(): void
{
$this->container->make('action');
$this->container->make('compass');
}
}
Loading