Alternative Sets of Configurations
August 15, 2020 ยท View on GitHub
Composer Config Plugin supports alternative sets of configurations creation on top of base config. This allows you to build configurations of several applications within one project, separating the common part.
How it works?
Main set of configurations merges with alternative, build and writes in separate folder named by alternative configuration name.
Configuration
Define alternative sets in config-plugin-alternatives extra-option as follow:
"extra": {
"config-plugin": {
"params": "config/params.php",
"web": "config/web.php",
...
},
"config-plugin-alternatives": {
"alfa": {
"params": "config/alfa/params.php",
"main": [
"$web"
"config/alfa/main.php"
]
},
"beta": {
"main": "config/beta/main.php
}
}
},
As shown, in alternative sets you can use configurations to merge from both the current one,
and main set. (in given example, in set alfa we use $web configuration from the main set).
To load sets of alternative configurations in your app, in entry point (index.php), for example, use require:
$config = require Yiisoft\Composer\Config\Builder::path('alfa/main');
$params variable in alternative sets
If defined in alternative set, parameters params will be merged with params from the main set,
and can be used in building all configurations in term of current set.
Example
Extra-options of composer.json:
"extra": {
"config-plugin": {
"params": "config/params.php",
"web": "config/web.php",
"providers": "config/providers.php"
},
"config-plugin-alternatives": {
"alfa": {
"params": "config/alfa/params.php",
"main": [
"$web"
"config/alfa/main.php"
],
"providers: "config/alfa/providers.php"
}
}
},
Built configurations in vendor/yiisoft/composer-config-plugin-output/:
# Main set
/params.php
/web.php
/providers.php
# alternative set 'alfa'
/alfa/params.php
/alfa/web.php
/alfa/main.php
/alfa/providers.php
Explanation of the result
Alternative set alfa:
params.phparray will haveparamsfrom the main set, merged withconfig/alfa/params.php. builtparams.phpwill be used in assembly of all configurations of thealfaset./alfa/web.phpConfiguration will be taken from main set./alfa/main.phpConfiguration will be built from main setwebconfiguration andconfig/alfa/main.php./alfa/providers.phpConfiguration will be built fromprovidersconfiguration of main set andconfig/alfa/providers.php.