https://github.com/phly/phly-configfactory
Factory for pulling nested configuration arrays from the config service
https://github.com/phly/phly-configfactory
Last synced: 11 months ago
JSON representation
Factory for pulling nested configuration arrays from the config service
- Host: GitHub
- URL: https://github.com/phly/phly-configfactory
- Owner: phly
- License: bsd-2-clause
- Created: 2020-01-14T13:35:00.000Z (over 6 years ago)
- Default Branch: 1.4.x
- Last Pushed: 2024-11-25T21:02:32.000Z (over 1 year ago)
- Last Synced: 2025-04-20T01:34:48.763Z (about 1 year ago)
- Language: PHP
- Homepage:
- Size: 106 KB
- Stars: 3
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: docs/CONTRIBUTING.md
- License: LICENSE.md
- Code of conduct: docs/CODE_OF_CONDUCT.md
- Support: docs/SUPPORT.md
Awesome Lists containing this project
README
# phly-configfactory
[](https://secure.travis-ci.org/phly/phly-configfactory)
[](https://coveralls.io/github/phly/phly-configfactory?branch=master)
This library provides a re-usable factory for pulling configuration from nested
keys.
> This library was previously released as [phly/phly-expressive-configfactory](https://github.com/phly/phly-expressive-configfactory).
> This version is a fork, modified to support [Laminas](https://getlaminas.org).
## Installation
Run the following to install this library:
```bash
$ composer require phly/phly-configfactory
```
## Usage
Assign the factory `Phly\ConfigFactory\ConfigFactory` to services named with the
following structure:
```text
config-
```
As an example, if you have the following structure:
```php
return [
'cache' => [
'adapters' => [
'blog' => [
'connection' => 'tcp://localhost:6349',
'username' => 'www-data',
'prefix' => 'blog',
],
],
],
];
```
and you wanted the "blog" adapter configuration, you would assign the dependency
as follows:
```php
return [
'dependencies' => [
'factories' => [
'config-cache.adapters.blog' => \Phly\ConfigFactory\ConfigFactory,
],
],
];
```
### Return empty or raise exception
By default, if no configuration at the expected key is found, the factory
returns an empty array. If you want it to instead raise an exception, you can
assign the factory as follows:
```php
return [
'dependencies' => [
'factories' => [
'config-cache.adapters.blog' => new \Phly\ConfigFactory\ConfigFactory(false),
],
],
];
```
> This operation is safe, as `ConfigFactory` implements `__set_state()`,
> allowing it to be serialized safely with `var_export()`.
The exception will indicate the key hierarchy it was attempting to retrieve.
### Using configuration in factories
In your factories, you will refer to the metaname when retrieving the service.
Following our example above:
```php
use Psr\Container\ContainerInterface;
class BlogCacheFactory
{
public function __invoke(ContainerInterface $container)
{
return new Cache($container->get('config-cache.adapters.blog'));
}
}
```
### Abstract Factory
If you are using [laminas-servicemanager](https://docs.laminas.dev/laminas-servicemanager),
you can use the class `Phly\ConfigFactory\ConfigAbstractFactory` as an abstract
factory. This allows you to omit adding a factory entry for every configuration
segment you want to retrieve. Instead, you can add the following:
```php
return [
'dependencies' => [
'abstract_factories' => [
\Phly\ConfigFactory\ConfigAbstractFactory::class,
// OR
new \Phly\ConfigFactory\ConfigAbstractFactory(false),
],
],
];
```
When present, it will handle any services with the prefix `config-`, and operate
in the same way as the `ConfigFactory`.
### Caveats
You should only specify keys that will return an array. Most containers only
allow returning an array or object from factories, and will raise an exception
otherwise. For those requiring an object, Mezzio generally casts to an
`ArrayObject` instance, making this safe.
## Support
* [Issues](https://github.com/phly/phly-configfactory/issues/)