Как в приложении Symfony 4 передать переменную окружения классу service?

#php #symfony #docker #environment-variables

#php #symfony #docker #переменные среды

Вопрос:

Я создаю приложение, используя Symfony 4 и Docker. В моем файле .env у меня есть следующая строка:

 DEVICE_CREATION_SECRET=123456
  

… и в моих сервисах.в файле yaml у меня есть следующее определение:

 VMSApplicationDigitalRetailHandlerDeviceForwardHandler:
    arguments:
        - env(DEVICE_CREATION_SECRET)
  

… который, как я ожидаю, передаст мой секрет (123456) моему классу, поскольку у меня есть это в этом классе:

 public function __construct(string $deviceCreationSecret)
{
    $this->deviceCreationSecret = $deviceCreationSecret;
}
  

Но когда я запускаю свое приложение и выводю значение, я получаю env(DEVICE_CREATION_SECRET) вместо моего secret (123456). Что мне нужно, чтобы получить доступ к этому секрету?

Комментарии:

1. Попробуйте '%env(DEVICE_CREATION_SECRET)%' ?

2. Для env(VARIABLE) установки переменной используется Cause .

Ответ №1:

Я думаю, что этот способ должен сработать:

 VMSApplicationDigitalRetailHandlerDeviceForwardHandler:
    arguments:
        - '%env(DEVICE_CREATION_SECRET)%'
  

https://symfony.com/doc/current/configuration/external_parameters.html

Ответ №2:

Перейдите к services.yml:

 parameters:
    DEVICE_CREATION_SECRET: '%env(DEVICE_CREATION_SECRET)%'
  

После этого в классе введите parameterBagInterface:

 use SymfonyComponentDependencyInjectionParameterBagParameterBagInterface;

private $deviceCreationSecret;
private $params;

public function __construct(
    string $deviceCreationSecret,
    ParameterBagInterface $params
)
{
    $this->deviceCreationSecret = $deviceCreationSecret;
    $this->params = $params;
}
  

И затем, для параметра get:

 $this->params->get('DEVICE_CREATION_SECRET');