112 lines
3.3 KiB
Markdown
112 lines
3.3 KiB
Markdown
![]() |
# 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) (1.*)
|
||
|
* [dflydev/placeholder-resolver](https://github.com/dflydev/dflydev-placeholder-resolver) (1.*)
|
||
|
* [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.
|