ruiadr / config
Gestionnaire de fichiers de configuration YAML.
Requires
- php: >=8.2
- ruiadr/base: ^4.1
- ruiadr/cache: ^4
- ruiadr/utils: ^2.3
- symfony/yaml: ^7.3
Requires (Dev)
- phpunit/php-code-coverage: 10.1.x-dev
- phpunit/phpunit: 10.5.x-dev
README
Gestionnaire de fichiers de configuration YAML.
⭐ Principe
Le module de configuration permet de gérer des fichiers de configuration YAML avec support de la hiérarchie d'environnements, du cache et de l'injection de variables d'environnement.
Le système utilise une hiérarchie basée sur une configuration de base (base
) et des configurations spécifiques qui héritent et surchargent ces valeurs.
Exemple de fichier YAML
# Configuration de base (héritée par toutes les autres sections)
base:
host: "127.0.0.1"
port: 3306
dbname: "project_db_base"
credentials:
username: "root"
password: ""
env:
dev:
dbname: "project_db_dev"
credentials:
username: "dev"
password: "ENV:LOCAL_DEV_PASSWORD"
# Configuration spécifique pour server1
server1:
host: "123.321.123.1" # Surcharge l'host de base
env:
preprod:
dbname: "project_db_preprod"
credentials:
username: "preprod"
password: "ENV:SERVER1_PREPROD_PASSWORD"
prod:
dbname: "project_db_prod"
credentials:
username: "prod"
password: "ENV:SERVER1_PROD_PASSWORD"
Héritage et fusion
- Configuration de base : La section
base
contient les valeurs par défaut - Héritage : Chaque section hérite automatiquement de la configuration de base
- Surcharge : Les valeurs spécifiques surchargent celles de la base
- Environnements : Les sections
env
permettent de surcharger selon l'environnement
Gestion des environnements
Définition d'un environnement
// Sans environnement (utilise la configuration de base)
$config = new Config('config.yml');
// Avec environnement dev
$configDev = new Config('config.yml', 'dev');
// Avec environnement prod
$configProd = new Config('config.yml', 'prod');
Résolution des valeurs par environnement
Avec la configuration d'exemple :
// Configuration de base
$config = new Config('config.yml');
$dbname = $config->server1->dbname; // "project_db_base"
// Configuration dev
$configDev = new Config('config.yml', 'dev');
$dbname = $configDev->server1->dbname; // "project_db_dev"
// Configuration prod
$configProd = new Config('config.yml', 'prod');
$dbname = $configProd->server1->dbname; // "project_db_prod"
Variables d'environnement
Le système supporte l'injection de variables d'environnement via la syntaxe ENV:VARIABLE_NAME
.
Utilisation
// En admettant la variable d'environnement "SERVER1_PROD_PASSWORD=secret123"
// du fichier yaml donné en exemple précédemment.
$config = new Config('config.yml', 'prod');
$password = $config->server1->credentials->password; // "secret123"
Système de cache
Le module supporte la mise en cache de la configuration pour améliorer les performances.
Cache Redis
use Ruiadr\Config\Config;
use Ruiadr\Config\ConfigCache;
use Ruiadr\Cache\RedisCache;
$configCache = new ConfigCache(new RedisCache());
$config = new Config('config.yml', 'prod', $configCache);
Cache fichier
use Ruiadr\Config\Config;
use Ruiadr\Config\ConfigCache;
use Ruiadr\Cache\FileCache;
$configCache = new ConfigCache(new FileCache('/path/to/cache'));
$config = new Config('config.yml', 'prod', $configCache);
Configuration du cache
use Ruiadr\Config\ConfigCache;
// Cache avec clé et TTL personnalisés
$configCache = new ConfigCache(
$cache, // Fichier ou Redis
'my_config_key', // Clé de cache personnalisée (défaut: config)
7200 // TTL de 2 heures (défaut: 86400 secondes)
);
⭐ Tests
Lancer les tests unitaires :
php vendor/bin/phpunit
Lancer les tests unitaires avec des statistiques de couverture du code :
La commande aura pour effet de générer un fichier coverage.xml qui pourra ensuite être utilisé par SonarCloud, et un répertoire coverage contenant le HTML permettant de consulter le compte rendu depuis son navigateur.
php vendor/bin/phpunit --log-junit=tests.xml --coverage-clover=coverage.xml --coverage-html coverage
xdebug doit être installé et activé. Exemple avec un conteneur Docker :
# /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
zend_extension=xdebug.so
[xdebug]
xdebug.mode=coverage