119 lines
2.9 KiB
PHP
119 lines
2.9 KiB
PHP
<?php
|
|
|
|
namespace App;
|
|
use App\Exceptions\ConfigFailedLoadingException;
|
|
use App\Exceptions\InvalidRouteException;
|
|
use App\Helpers\Authentification;
|
|
use App\Helpers\AutoLoader;
|
|
use App\Helpers\ConfigFactory;
|
|
use App\Http\Router;
|
|
use App\Infrastructure\Database;
|
|
|
|
/**
|
|
* Classe primaire du site.
|
|
* Permet de lancer l'application.
|
|
*/
|
|
final class Kernel {
|
|
|
|
/**
|
|
* Liste des fichiers de configuration sous le format suivant :
|
|
* [ 'nom_de_la_config' -> [ 'cle" → valeur ] ]
|
|
*
|
|
* @var array<string,array>
|
|
*/
|
|
public private(set) static array $configs = [];
|
|
|
|
/**
|
|
* Instance à la base de données.
|
|
* Pour utiliser la classe PDO : $DB->PDO.
|
|
*
|
|
* @var Database|null
|
|
*/
|
|
public private(set) static ?Database $DB = null;
|
|
|
|
/**
|
|
* Instance actuelle de l'application.
|
|
* @var Kernel|null
|
|
*/
|
|
private static ?self $instance = null;
|
|
|
|
/**
|
|
* Méthode qui permet de démarrer le site.
|
|
* @return self
|
|
*/
|
|
public static function start(): self {
|
|
self::$instance = new self();
|
|
self::$instance->init();
|
|
return self::$instance;
|
|
}
|
|
|
|
/**
|
|
* Permet d'obtenir l'instance actuelle du site.
|
|
* @return self
|
|
*/
|
|
public static function getInstance(): self {
|
|
return self::$instance;
|
|
}
|
|
|
|
/**
|
|
* Constructeur.
|
|
*/
|
|
public function __construct() {
|
|
}
|
|
|
|
/**
|
|
* Permet de préparer le démarrage du site.
|
|
* Lancé automatiquement par start().
|
|
*
|
|
* @return void
|
|
* @see self::start()
|
|
*/
|
|
public function init(): void {
|
|
$this->buildAutoloader();
|
|
$this->loadConfig();
|
|
$this->loadDatabase();
|
|
|
|
Authentification::startSession();
|
|
|
|
try {
|
|
Router::routeTo();
|
|
} catch ( InvalidRouteException $e ){
|
|
die( $e->getMessage() );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Permet de mettre en place l'Autoloader.
|
|
* @return void
|
|
*/
|
|
private function buildAutoloader(): void {
|
|
require_once 'Helpers/AutoLoader.php';
|
|
AutoLoader::register();
|
|
}
|
|
|
|
/**
|
|
* Permet de charger tous les fichiers de configuration du site.
|
|
* @return void
|
|
*/
|
|
private function loadConfig(): void {
|
|
try {
|
|
|
|
self::$configs['general'] = ConfigFactory::loadConfigFile('general');
|
|
self::$configs['database'] = ConfigFactory::loadConfigFile('database');
|
|
self::$configs['route_arguments'] = ConfigFactory::loadConfigFile('route_arguments');
|
|
self::$configs['views'] = ConfigFactory::loadConfigFile('views');
|
|
|
|
} catch( ConfigFailedLoadingException $e ){
|
|
die( $e->getMessage() );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Permet de se connecter à la base de données principale.
|
|
* @return void
|
|
*/
|
|
private function loadDatabase(): void {
|
|
self::$DB = new Database( self::$configs['database'] );
|
|
}
|
|
|
|
} |