ruiadr/config

Gestionnaire de fichiers de configuration YAML.

4.1.0 2025-06-24 11:40 UTC

README

pipeline status

Quality Gate Status Coverage

Reliability Rating Security Rating Maintainability Rating

Technical Debt Vulnerabilities

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

  1. Configuration de base : La section base contient les valeurs par défaut
  2. Héritage : Chaque section hérite automatiquement de la configuration de base
  3. Surcharge : Les valeurs spécifiques surchargent celles de la base
  4. 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