On this page

Introduction

laminas-config-aggregator is a lightweight library for managing application configuration. It was designed to be flexible in dev environments and fast in production.

It supports loading and merging configuration from multiple sources: PHP files, arrays, or INI/YAML/XML files (using laminas-config)

It also provides the ability to post process the merged configuration to apply e.g. parameter handling like symfony/dependency-injection

Basic usage

The standalone ConfigAggregator can be used to merge PHP-based configuration files:

use Laminas\ConfigAggregator\ConfigAggregator;
use Laminas\ConfigAggregator\PhpFileProvider;

$aggregator = new ConfigAggregator([
    new PhpFileProvider('*.global.php'),
]);

var_dump($aggregator->getMergedConfig());

Using this provider, each file should return a PHP array:

// db.global.php
return [
    'db' => [
        'dsn' => 'mysql:...',
    ],
];

// cache.global.php
return [
    'cache_storage' => 'redis',
    'redis' => [ ... ],
];

Result:

array(3) {
  'db' =>
  array(1) {
    'dsn' =>
    string(9) "mysql:..."
  }
  'cache_storage' =>
  string(5) "redis"
  'redis' =>
  array(0) {
     ...
  }
}

Configuration is merged in the same order as it is passed, with later entries having precedence.

Together with laminas-config, laminas-config-aggregator can be also used to load configuration in different formats, including YAML, JSON, XML, or INI:

use Laminas\ConfigAggregator\ConfigAggregator;
use Laminas\ConfigAggregator\LaminasConfigProvider;

$aggregator = new ConfigAggregator([
    new LaminasConfigProvider('config/*.{json,yaml,php}'),
]);

You can also supply post processors for configuration. These are PHP callables that accept the merged configuration as an argument, do something with it, and return configuration on completion. This could be used, for example, to allow templating parameters that are used in multiple locations and resolving them to a single value later.

Found a mistake or want to contribute to the documentation? Edit this page on GitHub!