Как типично для меня, я наткнулся на ответ в течение получаса после разочарования и просьбы о помощи.
Вопреки тому, как читается документация , просто добавив переменную вфайл .env
не делает его доступным внутри контейнера (и поэтому не отображается в списке при запуске bin/console debug:container --env-vars
и недоступен внутри контроллера с использованием $this->getParameter('env(VAR)')
). И если подумать об этом сейчас, то это имеет смысл, потому что вы не хотите, чтобы все ваших защищенных переменных были доступны для всего, что запускается из Контейнера.
Для доступа к env var высначала нужно его параметризовать, и таким образом вы также можете ограничить доступ к нему. Любые переменные env, которые вы хотите сделать доступными для всех ваших служб, вы можете установить в файле config/services.yaml
следующим образом (при условии, что включена автопроводка):
parameters:
variable_a: '%env(VAR_A)%'
Если вы предпочитаете ограничить переменную env тольконесколько сервисов, затем вы можете внедрить его в ваш сервис в качестве аргумента в config/services.yaml
, например, так:
services:
App\Service\Foo:
arguments:
$bar: '%env(BAZ)%'
С помощью параметра, настроенного, как указано выше, я теперь могу получить доступ к этому env var внутри моегоКонтроллер с $this->getParameter('variable_a')
. Выполнение bin/console debug:container --env-vars
также выводит его.
Это немного болезненно, так как я предполагал, что простой вызов $this->getParameter('env(BAZ)')
сделает свое дело, но я предполагаю, что это имеет смысл (на самом деле нет параметра с именем env(BAZ)
).
Надеюсь, это поможет кому-то еще изо всех сил пытаться обернуть голову вокруг этого.