diff options
-rw-r--r-- | .gitignore | 2 | ||||
-rw-r--r-- | config.example.php | 7 | ||||
-rw-r--r-- | public/index.php | 6 | ||||
-rw-r--r-- | src/Kernel.php | 51 |
4 files changed, 63 insertions, 3 deletions
@@ -1,6 +1,8 @@ /vendor/ db.sqlite +config.php +/plugins /public/artworks # Jetbrains diff --git a/config.example.php b/config.example.php new file mode 100644 index 0000000..11d878e --- /dev/null +++ b/config.example.php @@ -0,0 +1,7 @@ +<?php + +return [ + 'environment' => 'production', + 'plugins_directory' => __DIR__ . '/plugins', +]; + diff --git a/public/index.php b/public/index.php index 022af48..85aad22 100644 --- a/public/index.php +++ b/public/index.php @@ -1,8 +1,8 @@ <?php +use Elements\Kernel; + require_once dirname(__DIR__) . '/vendor/autoload.php'; -\Elements\Template::init(); -\Elements\DB::init(); -new \Elements\Router(); +Kernel::init(); diff --git a/src/Kernel.php b/src/Kernel.php new file mode 100644 index 0000000..29785a8 --- /dev/null +++ b/src/Kernel.php @@ -0,0 +1,51 @@ +<?php + +namespace Elements; + +class Kernel +{ + private static array $config = []; + + /** + * Kernel initialization. + */ + public static function init() + { + $configFile = self::findAppConfigFile(dirname(__DIR__)); + $config = include $configFile; + foreach ($config as $key => $value) { + self::$config[$key] = $value; + } + + Template::init(); + DB::init(); + new Router(); + } + + /** + * Find app config file in parent directories + */ + private static function findAppConfigFile(string $path): string + { + $currentDirectory = $path; + while ($currentDirectory !== '/') { + $configFile = $currentDirectory . '/config.php'; + if (file_exists($configFile)) { + return $configFile; + } + + $currentDirectory = dirname($currentDirectory); + } + + die('config.php missing'); + } + + /** + * Get config value + */ + public static function config($key): mixed + { + return self::$config[$key]; + } +} + |