You've already forked Php-Template
All checks were successful
🧪✨ Tests Workflow / 🛡️ 🔒 Library Audit (push) Successful in 2m50s
🧪✨ Tests Workflow / 📝 ✨ Code Lint (push) Successful in 2m40s
🧪✨ Tests Workflow / 🛡️ 🔒 License Check (push) Successful in 2m55s
🧪✨ Tests Workflow / 🧪 ✨ Database Migrations (push) Successful in 3m9s
🧪✨ Tests Workflow / 🐙 🔍 Code Sniffer (push) Successful in 2m56s
🧪✨ Tests Workflow / 🧪 ✅ Unit Tests (push) Successful in 1m22s
98 lines
3.2 KiB
PHP
98 lines
3.2 KiB
PHP
<?php
|
|
|
|
namespace Siteworxpro\App;
|
|
|
|
use Illuminate\Container\Container;
|
|
use Illuminate\Database\Capsule\Manager;
|
|
use Illuminate\Support\ServiceProvider;
|
|
use Siteworx\Config\Config as SWConfig;
|
|
use Siteworxpro\App\Services\Facade;
|
|
use Siteworxpro\App\Services\Facades\Config;
|
|
use Siteworxpro\App\Services\Facades\Dispatcher;
|
|
use Siteworxpro\App\Services\ServiceProviders\BrokerServiceProvider;
|
|
use Siteworxpro\App\Services\ServiceProviders\CommandBusProvider;
|
|
use Siteworxpro\App\Services\ServiceProviders\DispatcherServiceProvider;
|
|
use Siteworxpro\App\Services\ServiceProviders\LoggerServiceProvider;
|
|
use Siteworxpro\App\Services\ServiceProviders\RedisServiceProvider;
|
|
|
|
/**
|
|
* Class Kernel
|
|
*
|
|
* The Kernel class is responsible for bootstrapping the application by
|
|
* initializing service providers and setting up the database connection.
|
|
*
|
|
* @package Siteworxpro\App
|
|
*/
|
|
class Kernel
|
|
{
|
|
/**
|
|
* List of service providers to be registered during bootstrapping.
|
|
*
|
|
* @var array
|
|
*/
|
|
private static array $serviceProviders = [
|
|
LoggerServiceProvider::class,
|
|
RedisServiceProvider::class,
|
|
DispatcherServiceProvider::class,
|
|
BrokerServiceProvider::class,
|
|
CommandBusProvider::class,
|
|
];
|
|
|
|
/**
|
|
* Bootstraps the server by initializing the PSR-7 worker and router.
|
|
*
|
|
* This method sets up the PSR-7 worker and router instances, and registers
|
|
* the routes for the server. It should be called in the constructor of
|
|
* subclasses to ensure proper initialization.
|
|
*
|
|
* @return void
|
|
* @throws \ReflectionException
|
|
*/
|
|
public static function boot(): void
|
|
{
|
|
$container = new Container();
|
|
Facade::setFacadeContainer($container);
|
|
|
|
// Bind the container to the Config facade first so that it can be used by service providers
|
|
$container->bind(SWConfig::class, function () {
|
|
return SWConfig::load(__DIR__ . '/../config.php');
|
|
});
|
|
|
|
foreach (self::$serviceProviders as $serviceProvider) {
|
|
if (class_exists($serviceProvider)) {
|
|
$provider = new $serviceProvider($container);
|
|
if ($provider instanceof ServiceProvider) {
|
|
$provider->register();
|
|
} else {
|
|
throw new \RuntimeException(sprintf(
|
|
'Service provider %s is not an instance of ServiceProvider.',
|
|
$serviceProvider
|
|
));
|
|
}
|
|
} else {
|
|
throw new \RuntimeException(sprintf('Service provider %s not found.', $serviceProvider));
|
|
}
|
|
}
|
|
|
|
self::bootModelCapsule();
|
|
}
|
|
|
|
/**
|
|
* Bootstraps the model capsule for database connections.
|
|
*
|
|
* This method sets up the database connection using the Eloquent ORM.
|
|
* It retrieves the database configuration from the Config facade and
|
|
* initializes the Eloquent capsule manager.
|
|
*
|
|
* @return void
|
|
*/
|
|
private static function bootModelCapsule(): void
|
|
{
|
|
$capsule = new Manager();
|
|
$capsule->setEventDispatcher(Dispatcher::getFacadeRoot());
|
|
$capsule->addConnection(Config::get('db'));
|
|
$capsule->setAsGlobal();
|
|
$capsule->bootEloquent();
|
|
}
|
|
}
|