Я пытаюсь создать пакет Symfony. Но я не могу прочитать переменные ENV, которые я использую в конфигурации. (Они загружаются только как заполнитель). Я создал дерево конфигурации с некоторыми значениями, которые я бы хотел, чтобы приложение использовало с переменными ENV.
Конфигурационный файл приложения выглядит так:
bundle_name:
config_value: "%env(NAME_OF_ENV_VALUE)%"
Класс расширения My Bundle выглядит так:
public function load(array $configs, ContainerBuilder $container): void
{
$loader = new XmlFileLoader(
$container,
new FileLocator(__DIR__.'/../Resources/config')
);
$configuration = new Configuration();
$loader->load('services.xml');
$config = $this->processConfiguration($configuration, $configs);
print_r($config);
}
Результат print_r($config)
выглядит так:
[config_value] => env_NAME_OF_ENV_VALUE_2ae7ade5b0635007828f2e7e6765cd4d
Кроме того, я получаю это исключение:
EnvParameterException
Переменные среды "ENV_VAR_NAME" никогда не используются. Пожалуйста, проверьте конфигурацию вашего контейнера. в PhpDumper.php (строка 271)
Теперь мой вопрос:
Как мне (что оказывается заполнителем ENV) узнать фактическое значение переменной ENV?
Что я пробовал
Я знаю, что есть опция ContainerBuilder->compile(true)
, которая должна разрешать эти переменные ENV. Но я не могу понять, куда мне положить это в свой комплект. Все, что я пробовал, дает ошибки.
Я также знаю, что существует CompilerPass (Symfony \ Component \ DependencyInjection \ Compiler \ ResolveEnvPlaceholderPass), который (согласно названию) должен разрешать переменные env, но это ничего не делает. Я попытался добавить $container->addCompilerPass(new ResolveEnvPlaceholdersPass());
в метод build () моего класса Bundle, но ничего не произошло.
Дополнительная информация
- Я использую Symfony 4,
- PHP 7.2
- Проверено как на Mac OS, так и на Windows 7.
- ENV var загружен правильно. print_r ($ _ ENV) показывает это.