首页 > 解决方案 > 在 Symfony 2.8 中使用现有的环境变量

问题描述

我有一个使用 Symfony 2.8 构建的应用程序。现在,应用程序配置需要访问一个环境变量。这在 Symfony 2.8 (config.yml) 中不起作用,

id: "%env(SOME_ID)%"

有没有办法在 config.yml 文件中访问它。

标签: phpsymfonysymfony-2.8

解决方案


使用 Symfony 2.8,你可以从你的服务器声明一些外部参数:

  • 使用 Apache,使用SetEnv指令:

    <VirtualHost *:80>
        ...
        SetEnv    SYMFONY__DATABASE__USER user
        SetEnv    SYMFONY__DATABASE__PASSWORD secret
        SetEnv    SYMFONY__SOME_ID 1234
        ...
    </VirtualHost>
    
  • 使用 Nginx,使用fastcgi_param指令:

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

这些环境变量将通过一些转换传递给容器:

  • SYMFONY__前缀被移除
  • 参数名称为小写
  • 双下划线__替换为句点。

因此,您可以按原样使用它们:

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

您还可以传递一些 PHP 常量:

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

希望有帮助!


推荐阅读