https://github.com/puzzle-org/configuration
Configuration as a service
https://github.com/puzzle-org/configuration
configuration library oop php yaml
Last synced: about 2 months ago
JSON representation
Configuration as a service
- Host: GitHub
- URL: https://github.com/puzzle-org/configuration
- Owner: puzzle-org
- Created: 2013-11-17T22:58:15.000Z (over 11 years ago)
- Default Branch: master
- Last Pushed: 2023-03-28T07:08:09.000Z (over 2 years ago)
- Last Synced: 2024-09-22T20:18:19.508Z (10 months ago)
- Topics: configuration, library, oop, php, yaml
- Language: PHP
- Homepage:
- Size: 69.3 KB
- Stars: 4
- Watchers: 3
- Forks: 3
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
Puzzle-configuration 
====================Hide configuration implementation behind common interface.
Some advantages :
* Application does not depend upon configuration implementation details
* Application does not have to manage filesystem issues (for filesystem based implementations)
* Application can be easily tested, even for configuration edge cases (missing or wrong configuration values)
* Define configuration as a service in your dependency injection containerQA
--Service | Result
--- | ---
**CI** | [](https://github.com/puzzle-org/configuration/actions/workflows/ci.yml)
**Packagist** | [](https://packagist.org/packages/puzzle/configuration) [](https://packagist.org/packages/puzzle/configuration)Installation
------------
Use composer :
```json
{
"require": {
"puzzle/configuration" : "~8.3"
}
}
```_PHP 8.0 & 8.1 users please use puzzle/configuration 5.x_
_PHP 7.x users please use puzzle/configuration 4.x_
_PHP 5.6 users please use puzzle/configuration 3.x_
Documentation
-------------### Configuration as a service ###
```php
read('app/detection/threshold');
}
}
```The way the configuration value is read depends on the chosen implementation.
Up to now, 2 implementations are provided :
* Memory (for unit testing purpose)
* Yaml (based on Symfony/Yaml).For YAML one, ```'app/detection/threshold'``` means ```detection[thresold]``` in app.yml file.
When you instanciate YamlConfiguration object, you need to provide where yaml files can be found :```php
2
);$example = new ExampleTest($config);
```
### Default values ###
```php
read('a/b/c', 'default value if a/b/c does not exist');
```But if ```a/b/c``` is required :
```php
readRequired('a/b/c');
```### Fallback strategy ###
```php
readFirstExisting('a/b/c', 'd/e/f', 'x/y/z');
```### Override configuration ###
If you need some configuration to (partially or not) override another one :
```php
overrideBy($defaultConfig)
->overrideBy($localConfig);// values will be read in localConfig first. They will be read in default config only if they don't exist in local one.
```Another example :
```php
2
);$config = new Puzzle\Configuration\Stacked();
$config->overrideBy($defaultConfig)
->overrideBy($overrideConfig);
```
You can add as many as configuration instances you want in the stack. The last inserted is the most prioritary.If you want to add the least prioritary, use the ```addBase()``` method :
```php
overrideBy($overrideConfig)
->addBase($defaultConfig);
```### Prefixed configuration ###
You can use automatic prefix decorator ```PrefixedConfiguration```. It can be useful for "namespace like" configurations such as loggers or multiple databases ones.
```yaml
# logger.ymlapp:
filename: app.log
verbosity: INFO
users:
filename: users.log
verbosity: WARNING
``````php
readRequired('filename');
$verbosity = $config->readRequired('verbosity');
```Changelog
---------**5.x --> 8.3**
- Drop php 8.0 & 8.1 support. Minimal version is 8.3
- Version names are now match the PHP version as the library does not need to functionaly evolve anymore
- Get rid of Gaufrette. Own interface is provided, please implements it. A Gaufrette adapter is provided for smooth migration**4.x --> 5.x**
- Drop php 7 support. Minimal version is 8.0
**3.x --> 4.x**- Drop php 5.6 & 7.0 support. Minimal version is 7.1.0
**2.x --> 3.x**- Drop php 5.5 support. Minimal version is 5.6.0
**1.x -> 2.x**- Drop php 5.4 support. Minimal version is 5.5.0