【问题标题】:Use Existing Environment Variable in Symfony 2.8在 Symfony 2.8 中使用现有的环境变量
【发布时间】:2018-11-06 08:36:29
【问题描述】:

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

id: "%env(SOME_ID)%"

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

【问题讨论】:

  • 环境变量是你自己设置的吗?我的意思是,它是为您的应用程序创建的自定义吗?
  • 是的,它会在应用部署期间自动设置
  • 尝试将其命名为SYMFONY__SOME__ID(注意双精度_)并使用id: '%some.id%'访问它
  • env() 自 symfony 3.2 起可用
  • @cid 我无法更改已经定义并在其他地方使用的环境变量名称。

标签: php symfony symfony-2.8


【解决方案1】:

使用 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')"

希望有帮助!

【讨论】:

    猜你喜欢
    • 2019-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-19
    • 1970-01-01
    • 2021-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多