Использовать существующую переменную среды в Symfony 2.8

У меня есть приложение, созданное с использованием Symfony 2.8. Теперь конфигурации приложения необходимо получить доступ к переменной среды. Это не работает в Symfony 2.8 (config.yml),

id: "%env(SOME_ID)%"

Есть ли способ получить к нему доступ в файле config.yml.


person user960567    schedule 06.11.2018    source источник
comment
Вы сами установили переменную окружения? Я имею в виду, это пользовательский, созданный для вашего приложения?   -  person Cid    schedule 06.11.2018
comment
да, он будет автоматически установлен во время развертывания приложения   -  person user960567    schedule 06.11.2018
comment
Попробуйте назвать его SYMFONY__SOME__ID (обратите внимание на двойной _) и получите к нему доступ, используя id: '%some.id%'   -  person Cid    schedule 06.11.2018
comment
env() доступен начиная с Symfony 3.2   -  person Cid    schedule 06.11.2018
comment
@cid Я не могу изменить имя переменной env, оно уже определено и используется в другом месте.   -  person user960567    schedule 06.11.2018
comment
взгляните на это в сочетании с getenv() это может помочь   -  person Cid    schedule 06.11.2018


Ответы (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')"

Надеюсь, это поможет !

person Darwin    schedule 06.11.2018