https://github.com/dflydev/dflydev-dot-access-configuration
Given a deep data structure representing a configuration, access configuration by dot notation.
https://github.com/dflydev/dflydev-dot-access-configuration
Last synced: about 1 year ago
JSON representation
Given a deep data structure representing a configuration, access configuration by dot notation.
- Host: GitHub
- URL: https://github.com/dflydev/dflydev-dot-access-configuration
- Owner: dflydev
- License: mit
- Created: 2012-04-24T21:56:42.000Z (about 14 years ago)
- Default Branch: master
- Last Pushed: 2023-01-06T20:52:18.000Z (over 3 years ago)
- Last Synced: 2025-03-28T13:06:04.467Z (about 1 year ago)
- Language: PHP
- Size: 37.1 KB
- Stars: 134
- Watchers: 3
- Forks: 8
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- Contributing: .github/CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
# Dot Access Configuration
Given a deep data structure representing a configuration, access
configuration by dot notation.
This library combines [dflydev/dot-access-data](https://github.com/dflydev/dflydev-dot-access-data)
and [dflydev/placeholder-resolver](https://github.com/dflydev/dflydev-placeholder-resolver)
to provide a complete configuration solution.
## Requirements
* PHP (5.3+)
* [dflydev/dot-access-data](https://github.com/dflydev/dflydev-dot-access-data) (^3)
* [dflydev/placeholder-resolver](https://github.com/dflydev/dflydev-placeholder-resolver) (1.x)
* [symfony/yaml](https://github.com/symfony/Yaml) (>2,<2.2) *(suggested)*
## Usage
Generally one will use an implementation of `ConfigurationBuilderInterface`
to build `ConfigurationInterface` instances. For example, to build a Configuration
out of a YAML file, one would use the `YamlFileConfigurationBuilder`:
```php
use Dflydev\DotAccessConfiguration\YamlFileConfigurationBuilder;
$configurationBuilder = new YamlFileConfigurationBuilder('config/config.yml');
$configuration = $configurationBuilder->build();
```
Once created, the Configuration instance behaves similarly to a Data
instance from [dflydev/dot-access-data](https://github.com/dflydev/dflydev-dot-access-data).
```php
$configuration->set('a.b.c', 'ABC');
$configuration->get('a.b.c');
$configuration->set('a.b.e', array('A', 'B', 'C'));
$configuration->append('a.b.e', 'D');
```
## Custom Configurations
Configuration Builders use Configuration Factories and Placeholder Resolver
Factories behind the scenes in order to build a working configuration.
Under normal circumstances one should not need to do anything with the
Placeholder Resolver Factory. However, one may wish to extend the
default `Configuration` class or use an entirely different implementation
altogether.
In order to build instances of custom `ConfigurationInterface` implementations
with the standard builders, one would need to implement
`ConfigurationFactoryInterface` and inject it into any
`ConfigurationBuilderInterface`.
If a Configuration is declared as follows:
```php
namespace MyProject;
use Dflydev\DotAccessConfiguration\Configuration;
class MyConf extends Configuration
{
public function someSpecialMethod()
{
// Whatever you want here.
}
}
```
Create the following factory:
```php
namespace MyProject;
use Dflydev\DotAccessConfiguration\ConfigurationFactoryInterface;
class MyConfFactory implements ConfigurationFactoryInterface
{
/**
* {@inheritdocs}
*/
public function create()
{
return new MyConf;
}
}
```
To use the factory with any builder, inject it as follows:
```php
use Dflydev\DotAccessConfiguration\YamlFileConfigurationBuilder;
use MyProject\MyConfFactory;
$configurationBuilder = new YamlFileConfigurationBuilder('config/config.yml');
// Inject your custom Configuration Factory
$configurationBuilder->setConfigurationFactory(new MyConfFactory);
// Will now build instances of MyConfFactory instead of
// the standard Configuration implementation.
$configuration = $configurationBuilder->build();
```
## License
This library is licensed under the New BSD License - see the LICENSE file
for details.
## Community
If you have questions or want to help out, join us in the
[#dflydev](irc://irc.freenode.net/#dflydev) channel on irc.freenode.net.