Как обработать% kernel.project_dir% из переменной .env? - PullRequest
2 голосов
/ 08 июля 2020

Я добавил это в свой .env:

PHOTOS_DIR=%kernel.project_dir%/var/photos

Конечно, когда я пытаюсь получить значение $_ENV['PHOTOS_DIR'], я получаю необработанную строку %kernel.project_dir%/var/photos.

Но как я могу получить значение, обработанное конфигурационным процессором Symfony, например /my/project/var/photos?

EDIT : Я знаю, что это просто можно добавить в services.yaml:

parameters:
    photos_dir: '%kernel.project_dir%/var/photos'

Но я хотел бы сохранить важные данные конфигурации в файле .env.

Ответы [ 3 ]

4 голосов
/ 09 июля 2020

Чтобы раскрыть %kernel.project_dir%, используйте %env(resolve:...) в параметрах, например:

parameters:
    photos_dir: '%env(resolve:PHOTOS_DIR)%'
2 голосов
/ 08 июля 2020

Ваш dotenv не обрабатывает параметры процессора symfony yaml.
Удалите% kernel.project_dir% из файла .env, а в вашем .yaml вам нужно привязать параметр следующим образом:

photos_absolute_path: '%kernel.project_dir%%env(PHOTOS_DIR)%'

После этого вы можете получить параметр из вашего контейнера с именем photos_absolute_path , и он укажет на правильное местоположение

1 голос
/ 09 июля 2020

Использование параметров symfony в .env-файлах является правильным. Symfony автоматически разрешит их.

После того, как контейнер будет скомпилирован, вы можете получить реальное значение, если привяжете его к параметру. .env

PHOTOS_DIR=%kernel.project_dir%/var/photos

services.yaml:

parameters:
    photos_dir: '%env(PHOTOS_DIR)%'

Где-то в вашем приложении:

$container->getParameter('photos_dir');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...