nulib-base/php/src/app/config.php

56 lines
2.1 KiB
PHP

<?php
namespace nulib\app;
use nulib\app\config\ConfigManager;
use nulib\app\config\JsonConfig;
use nulib\app\config\YamlConfig;
use nulib\os\path;
use nulib\ValueException;
/**
* Class config: gestion de la configuration de l'application
*/
class config {
protected static ConfigManager $config;
static function init_configurator($configurators): void {
self::$config->addConfigurator($configurators);
}
# certains types de configurations sont normalisés
/** ne configurer que le minimum pour que l'application puisse s'initialiser */
const CONFIGURE_INITIAL_ONLY = ["include" => "initial"];
/** ne configurer que les routes */
const CONFIGURE_ROUTES_ONLY = ["include" => "routes"];
/** configurer uniquement ce qui ne nécessite pas d'avoir une session */
const CONFIGURE_NO_SESSION = ["exclude" => "session"];
static function configure(?array $params=null): void {
self::$config->configure($params);
}
static final function add($config, string ...$profiles): void { self::$config->addConfig($config, $profiles); }
static final function load_config($file): void {
$ext = path::ext($file);
if ($ext === ".yml" || $ext === ".yaml") {
$config = new YamlConfig($file);
} elseif ($ext === ".json") {
$config = new JsonConfig($file);
} else {
throw ValueException::invalid_value($file, "config file");
}
self::add($config);
}
static final function get(string $pkey, $default=null, ?string $profile=null) { return self::$config->getValue($pkey, $default, $profile); }
static final function k(string $pkey, $default=null) { return self::$config->getValue("app.$pkey", $default); }
static final function db(string $pkey, $default=null) { return self::$config->getValue("dbs.$pkey", $default); }
static final function m(string $pkey, $default=null) { return self::$config->getValue("msgs.$pkey", $default); }
static final function l(string $pkey, $default=null) { return self::$config->getValue("mails.$pkey", $default); }
}
new class extends config {
function __construct() {
self::$config = new ConfigManager();
}
};