Symfony News

New in Symfony 3.2: Runtime Environment Variables

Nicolas Grekas

Contributed by
Nicolas Grekas
in #19681.

Environment variables are becoming increasingly popular to manage the application configuration. They are one of the main concepts of the twelve-factor app methodology. Their main advantages are that they can can be changed between deploys without changing any code and that they don't need to be checked into the code repository.

Symfony has supported environment variables since day one thanks to the special SYMFONY__ variables. However their behavior was rather simple: when the application container was built, the values of those environment variables were dumped into the compiled container. Therefore, if those variables changed during the application execution, the updated values were ignored.

In Symfony 3.2 we added full support for environment variables. The first improvement is that you no longer have to prefix those variables with SYMFONY__ (any variable name will work). The second improvement is that their value is resolved at runtime, so the application will always use the updated value.

In order to use an environment variable in any Symfony configuration file, use the new %env(VARIABLE_NAME)% syntax:

1
2
3
4
5
# app/config/config.yml
doctrine:
    dbal:
        # ...
        password: "%env(DB_PASSWORD)%"

In the previous example, whenever Symfony/Doctrine need the database password, they'll make a call to get the value of the DB_PASSWORD environment variable. To avoid undefined variable errors, you can define default values for these variables using the syntax env(VARIABLE_NAME): VARIABLE_VALUE:

1
2
3
# app/config/parameters.yml
parameters:
    env(DB_PASSWORD): s3cr3t_1234

Be trained by Symfony experts - 2016-10-17 Paris - 2016-10-24 Paris - 2016-10-24 Lyon


About us

What a Symfony developer should know about the framework: News, Jobs, Tweets, Events, Videos,...

Resources

Find us on Twitter

Find us on Facebook