This bundle provides a way to read parameters from environment variables at runtime. The value defined in the container parameter is used as fallback when the environment variable is not available.
Installation is a quick (I promise!) 2 step process:
- Download IncenteevDynamicParametersBundle
- Enable the bundle
Run the following composer require command:
$ composer require incenteev/dynamic-parameters-bundle
Finally, enable the bundle in the kernel:
// app/AppKernel.php
public function registerBundles()
{
$bundles = array(
// ...
new Incenteev\DynamicParametersBundle\IncenteevDynamicParametersBundle(),
);
}
Define the map of parameter names with the environment variable used to configure them.
# app/config/config.yml
incenteev_dynamic_parameters:
parameters:
database_host: DATABASE_HOST
"database.name": DATABASE_NAME
Environment variables are always strings. To be able to set parameters of other types, the bundle supports parsing the environment variable as inline Yaml:
# app/config/config.yml
incenteev_dynamic_parameters:
parameters:
use_ssl:
variable: HAS_SSL
yaml: true
If you are using the env-map feature of the Incenteev ParameterHandler, you can import the whole env-map very easily:
# app/config/config.yml
incenteev_dynamic_parameters:
import_parameter_handler_map: true
parameters:
something_else: NOT_IN_THE_COMPOSER_JSON
The ParameterHandler parses the environment variables as inline Yaml, so the Yaml parsing is automatically enabled for these variables when importing the map.
Note: Any parameter defined explicitly will win over the imported map.
By default, the bundle will look for the composer.json file in %kernel.root_dir%/../composer.json
. If you use a non-standard location for your kernel, you can change the path to your composer.json file to read the env-map:
# app/config/config.yml
incenteev_dynamic_parameters:
import_parameter_handler_map: true
composer_file: path/to/composer.json
The bundle takes care of service arguments, but changing the behavior of $container->getParameter()
is not possible. However, it exposes a service to get parameters taking the environment variables into account.
$this->get('incenteev_dynamic_parameters.retriever')->get('use_ssl');
- Getting a parameter from the container directly at runtime will not use the environment variable
- Parameters or arguments built by concatenating other parameters together will not rely on the environment variables (yet)