Add TuxiNet branding and document templates
This commit is contained in:
93
app/Core/Config.php
Normal file
93
app/Core/Config.php
Normal file
@@ -0,0 +1,93 @@
|
||||
<?php
|
||||
|
||||
namespace App\Core;
|
||||
|
||||
class Config
|
||||
{
|
||||
private static ?self $instance = null;
|
||||
|
||||
/** @var array<string, mixed> */
|
||||
private array $values = [];
|
||||
|
||||
private function __construct()
|
||||
{
|
||||
$this->loadEnv();
|
||||
$this->loadConfigFiles();
|
||||
}
|
||||
|
||||
public static function getInstance(): self
|
||||
{
|
||||
if (self::$instance === null) {
|
||||
self::$instance = new self();
|
||||
}
|
||||
|
||||
return self::$instance;
|
||||
}
|
||||
|
||||
public function get(string $key, $default = null)
|
||||
{
|
||||
$segments = explode('.', $key);
|
||||
$value = $this->values;
|
||||
|
||||
foreach ($segments as $segment) {
|
||||
if (!is_array($value) || !array_key_exists($segment, $value)) {
|
||||
return $default;
|
||||
}
|
||||
$value = $value[$segment];
|
||||
}
|
||||
|
||||
return $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array<string, mixed> $config
|
||||
*/
|
||||
public function set(array $config): void
|
||||
{
|
||||
$this->values = array_replace_recursive($this->values, $config);
|
||||
}
|
||||
|
||||
private function loadEnv(): void
|
||||
{
|
||||
$envPath = base_path('.env');
|
||||
if (!file_exists($envPath)) {
|
||||
return;
|
||||
}
|
||||
|
||||
$lines = file($envPath, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
|
||||
if ($lines === false) {
|
||||
return;
|
||||
}
|
||||
|
||||
foreach ($lines as $line) {
|
||||
if (str_starts_with(trim($line), '#')) {
|
||||
continue;
|
||||
}
|
||||
|
||||
[$name, $value] = array_map('trim', explode('=', $line, 2) + [1 => '']);
|
||||
$value = trim($value, "\"' ");
|
||||
$_ENV[$name] = $value;
|
||||
putenv("{$name}={$value}");
|
||||
}
|
||||
}
|
||||
|
||||
private function loadConfigFiles(): void
|
||||
{
|
||||
$configDir = base_path('config');
|
||||
if (!is_dir($configDir)) {
|
||||
return;
|
||||
}
|
||||
|
||||
$files = glob($configDir . '/*.php');
|
||||
if ($files === false) {
|
||||
return;
|
||||
}
|
||||
|
||||
foreach ($files as $file) {
|
||||
$key = basename($file, '.php');
|
||||
/** @var array<string, mixed> $data */
|
||||
$data = require $file;
|
||||
$this->values[$key] = $data;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user