Appcfg

Application config system

En inspiration d'une précédente réalisation, pour le fun et mon usage, j'ai codé un système de config.

Qu'a-t-il de particulier pour nécessiter une nouvelle lib ?

Chaque notion a été découplée pour permettre d'utiliser chaque élément séparément pour construire son propre système custom.

Une classe Appcfg a été créée comme helper pour les cas d'usage basiques, ex :

(new \Arnapou\Appcfg\Appcfg())
    ->autoload(
        source: [
            'db' => [
                'main' => [
                    'host' => 'localhost',
                    'port' => 3306,
                    'name' => 'project_main',
                    'password' => 'project_password',
                ],
                'data' => [
                    'host' => '%(db.main.host)%',
                    'port' => '%(db.main.port)%',
                    'name' => 'project_data',
                    'password' => '%(db.main.password)%',
                ],
            ],
            'db|prod' => [
                'main' => [
                    'password' => '%env(DB_PASSWORD)%',
                ],
            ],
        ],
        filename: __DIR__ . '/cache/config.php',
        class: MyApp\Config::class,
        environment: 'prod',
    );

Le dumper fournit produit des classes php fortement typées, possiblement immutables, ex :

namespace MyProject;

final readonly class ConfigDbMain
{
    public function __construct(
        public string $host = 'localhost',
        public int $port = 3306,
        public string $name = 'project_main',
        public string $password = '123456',
    ) {}
}

final readonly class ConfigDbData
{
    public function __construct(
        public string $host = 'localhost',
        public int $port = 3306,
        public string $name = 'project_data',
        public string $password = '123456',
    ) {}
}

final readonly class ConfigDb
{
    public function __construct(
        public ConfigDbMain $main = new ConfigDbMain(),
        public ConfigDbData $data = new ConfigDbData(),
    ) {}
}

final readonly class Config
{
    public function __construct(
        public ConfigDb $db = new ConfigDb(),
    ) {}
}

Détails

Pour plus de détails techniques, allez voir le README sur Gitlab.

Liens