Ciekawy patent na Config, który nie jest ani plikiem ini/.env parsowanym przez nas, ani wykorzystaniem jakiejś zewnętrznej biblioteczki z composerem, ale naprawdę kreatywnym podejściem do tematu.
Autor posiada folder Config, a w nim plik app.php:
<?php
return [
'app_name' => 'Bug Report App',
'env' => 'local',
'debug' => true,
'log_path' => __DIR__ . '/../Logger',
];
W tym samym folderze ma także database.php:
<?php
return [
'pdo' => [
'driver' => 'mysql',
'host' => 'localhost',
'db_name' => 'bug_app',
'db_username' => 'root',
'db_user_password' => '',
'default_fetch' => PDO::FETCH_OBJ,
],
'mysqli' => [
'host' => 'localhost',
'db_name' => 'bug_app',
'db_username' => 'root',
'db_user_password' => '',
'default_fetch' => MYSQLI_ASSOC,
],
];
Klasa config wygląda tak i jest genialna w swojej prostocie:
class Config
{
public static function get(string $filename, string $key = null)
{
$fileContent = self::getFileContent($filename);
if($key === null){
return $fileContent;
}
return isset($fileContent[$key]) ? $fileContent[$key] : [];
}
public static function getFileContent(string $filename): array
{
$fileContent = [];
try{
$path = realpath(sprintf(__DIR__ . '/../Configs/%s.php', $filename));
if(file_exists($path)) {
$fileContent = require $path;
}
}catch (\Throwable $exception){
throw new NotFoundException(
sprintf('The specified file: %s was not found', $filename)
);
}
return $fileContent;
}
Całkiem sprytne podejście do tematu.