В среде dev приложения Symfony 3.4 я пытаюсь сохранить учетные данные как переменные среды. Я не могу заставить его работать, и я не могу понять, чего не хватает. Вот что у меня есть:
В app\config\.env у меня определен ключ API, например:
GOOGLE_DEVELOPER_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
В app\config\services.yml у меня есть:
parameters:
google.developer.key: "%env(GOOGLE_DEVELOPER_KEY)%"
В одном из моих контроллеров я хочу передать этот параметр объекту следующим образом:
$client = new \Google_Client();
$client->setDeveloperKey($this->getParameter('google.developer.key'));
На мой взгляд, эта установка выглядит нормально, но когда я пытаюсь ее запустить, я получаю EnvNotFoundException со следующим сообщением:
Environment variable not found: "GOOGLE_DEVELOPER_KEY".
Когда я вставляю ключ напрямую в app\config\services.yml, он работает нормально:
parameters:
google.developer.key: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
(Но я хочу не этого по разным причинам.)
Я очистил кеш dev, перезапустил веб-сервер, прочитал соответствующую документацию Symfony (я думаю), но безуспешно. Думаю, я пропускаю шаг, но не могу понять, что это было бы. Любые подсказки будут оценены.
Странный. Спасибо, @ Smaïne.




Symphony v3.4 документация по переменным среды рекомендует использовать ваш веб-сервер для настройки переменных среды.
Я не мог проверить это, так как моя установка - это Symfony v4, и она использует файл /.env для настройки переменных среды.
Надеюсь, это каким-то образом поможет.
Для производства - да, но для разработки подойдет файл .env.
Для производства это мой план, но для dev это непрактично по нескольким причинам. Спасибо!
Symfony 3.4 не загружает файл .env автоматически. Вы должны изменить ваш app_dev.php, чтобы загрузить файл:
use Symfony\Component\Dotenv\Dotenv;
...
$dotenv = new Dotenv();
$dotenv->load(__DIR__.'/../app/config/.env');
Думаю, в этом есть смысл. Что еще более важно: это полностью работает. Спасибо!
Я отредактировал свой ответ, чтобы явно указать часть composer require symfony/dotenv.
Спасибо @Francesco Abeni. Однако мне не требовался этот шаг. Разве он не поставляется с Symfony 3.4?
@ACJ, ты прав. Этот шаг не нужен в Symfony 3.4.
На самом деле это неправильно! Здесь вы загружаете определенный файл .env, но это может быть НЕ тот файл .env или даже переменные среды, которые использует ваше приложение Symfony! (подумайте о переменных, поступающих из Docker, .env.XXX.local, parameters.yml и т. д.)
@Sliq ваш комментарий полезен, но я не думаю, что мой ответ неправильный. Он отвечает на исходный вопрос: «Почему мой файл .env не загружается?». Конечно, вы можете получить переменные окружения из других мест, но это другой вопрос, ИМХО. Спасибо за ваше предложение!
Зачем инициализировать Google_Client в вашем контроллере, а не использовать контейнер службы?
См .: https://symfony.com/doc/3.4/service_container.html
Вы можете передать этот ключ разработчика в массиве с ключом developer_key в конструкции.
Проблема не в этом, но спасибо за ваше предложение.
Ваш код работает на меня