stefna/config

Lightweight config loader with type safety

1.4.0 2025-05-19 13:06 UTC

This package is auto-updated.

Last update: 2025-05-19 13:07:33 UTC


README

Build Status Latest Version on Packagist Software License

This package is a lightweight config loader with type safety as the primary corner stone.

Requirements

PHP 8.2 or higher.

Installation

composer require stefna/config

Motivation

Most config loaders fail to give the user a way to use it in a type safe way.

It also promises to be immutable after first read.

Usage

Load config from file

We support writing your config in php files

Example:

<?php

// config.php

return [
	'config-key' => 'value',
	'nested' => [
		'key' => 'nested-value'
		'bool-key' => false,
	],
];
$config = new \Stefna\Config\FileConfig('path-to-php/config.php');
// config file is not read until it's needed

$config->getBool('nested.bool-key') === false;
$config->getString('config-key') === 'value';

Load multiple files into config

<?php

// common.php

return [
	'config-key' => 'value',
	'nested' => [
		'key' => 'nested-value'
		'bool-key' => false,
	],
];
<?php

// production.php

return [
	'config-key' => 'production-value',
	'nested' => [
		'extra-key' => 42,
	],
];
$config = new \Stefna\Config\FileCollectionConfig('path-to-php/');
$config->addFile('common.php');
$config->addFile('production.php');

// config files is not read until it's needed

$config->getInt('nested.extra-key') === 42;
$config->getString('config-key') === 'product-value';

Mutable config

We do provide a mutable config that allows you to override values in the "root" config this is meant to be used when testing applications but still allow the "root" configuration to stay immutable

$rootConfig = new \Stefna\Config\FileCollectionConfig('path-to-php/');
$rootConfig->addFile('common.php');
$rootConfig->addFile('production.php');

$config = new \Stefna\Config\MutableConfig($rootConfig);

$config->setConfigValue('config-key', 'overridden-value');

$config->getString('config-key') === 'overridden-value';

$config->resetConfigValue('config-key');

$config->getString('config-key') === 'production-value';

Contribute

We are always happy to receive bug/security reports and bug/security fixes

License

The MIT License (MIT). Please see License File for more information.