在Symfony 2.8中使用现有环境变量

I have an application built using Symfony 2.8. Now, the application config need to access an environment variable. This is not working in Symfony 2.8 (config.yml),

id: "%env(SOME_ID)%"

Is there a way to access it in config.yml file.

With Symfony 2.8, you can declare some external parameters from your server :

  • With Apache, with the SetEnv directive:

    <VirtualHost *:80>
        ...
        SetEnv    SYMFONY__DATABASE__USER user
        SetEnv    SYMFONY__DATABASE__PASSWORD secret
        SetEnv    SYMFONY__SOME_ID 1234
        ...
    </VirtualHost>
    
  • With Nginx, with fastcgi_param directive:

    server {
      ...
      location ~ ^/app\.php(/|$) {
        ...
        fastcgi_param SYMFONY__DATABASE__USER user;
        fastcgi_param SYMFONY__DATABASE__PASSWORD secret;
        fastcgi_param SYMFONY__SOME_ID 1234
        ...
      }
    }
    

These environment variables will be passed to the container, with some transformations:

  • SYMFONY__ prefix is removed
  • Parameter name is lowercased
  • Double underscores __ are replaced with a period.

So you can use them as is:

doctrine:
    dbal:
    driver:   pdo_mysql
    dbname:   symfony_project
    user:     '%database.user%'
    password: '%database.password%'
some_config:
    id: '%some_id%'

You can also pass some PHP constants :

parameters:
    some_id: "@=constant('SOME_ID')"
    my_class.some_id: "@=constant('My_Class::SOME_ID')"

Hope that helps !