Как получить переменные среды в файле параметров в структуре Symfony4?
я сделал новую установку Symfony, используя Symfony Flex, и новый скелет принадлежит следующей структуре каталогов Symfony 4.
я добавляю и настраиваю первый сторонний пакет:HWIOAuthBundle. Этот пакет используется для подключения через Twitter с использованием двух секретных данных.
мои consumer_id
и меня consumer_secret
на .
hwi_oauth:
firewall_names: [secured_area]
resource_owners:
twitter:
type: twitter
client_id: XXXXXMyIdXXXXX
client_secret: XXXXXMyTopSecretKeyXXXXX
мое приложение работает нормально. Но я не могу доверить свои секреты. на GitHub!
я хочу вот так:
hwi_oauth:
firewall_names: [secured_area]
resource_owners:
twitter:
type: twitter
client_id: '%twitter_consumer_id%'
client_secret: '%twitter_consumer_secret%'
прочитал Symfony4 лучшие практики о новом пакете DotEnv.
использование переменных среды, хотя и далеки от совершенства, имеют много преимуществ по сравнению с тем, что мы в настоящее время делаем. Переменные среды являются более "стандартным" способом управления параметрами, которые зависят от среды (нет необходимости управлять параметрами.в формате YML.dist для экземпляр.)
как предложено в лучших практиках, я добавляю эти две строки в :
TWITTER_CONSUMER_ID=XXXXXMyIdXXXXX
TWITTER_CONSUMER_SECRET=XXXXXMyTopSecretKeyXXXXX
но я столкнулся с этой ошибки:
вы запросили несуществующий параметр "twitter_consumer_id".
я пробовал с %kernel.twitter_consumer_id%
, %env.twitter_consumer_id%
, %env(TWITTER_CONSUMER_ID)%
С большим успехом.
последний тест возвращает это сообщение об ошибке:
было создано исключение во время рендеринга шаблона ("переменная среды не найдена: "TWITTER_CONSUMER_ID".").
как я могу получить мои переменные ENV в файле параметров, таком как hwi_oauth.yaml
?
2 ответов
вам нужно загрузить .env
файл во время процесса начальной загрузки, чтобы эти переменные среды должны быть доступны:
(new DotEnv())->load(__DIR__ . '/../.env');
вы должны запланировать поместить секретные ключи в переменные среды при разработке, постановке и производстве. как вы это делаете, зависит, однако. в разработке и постановке, возможно, вы используете .env
файлы, в то время как на производстве вы используете Apache, чтобы придать.
лично я всегда использую .env
файлы, и я сохраняю пустой в моем хранилище. Таким образом, это очень просто развернуть, и нет никаких особых случаев.
если вы только хотите использовать .env
файлы в определенных средах, вы можете сделать:
if (in_array(getenv('APP_ENV'), [ 'dev', 'test' ])) {
(new DotEnv())->load(__DIR__ . '/../.env');
}
на test
среды, которые я бы предложил также создать bootstrap.php
скрипт для переопределения .env
параметры:
тесты / bootstrap.на PHP:
<?php
use Symfony\Component\Dotenv\Dotenv;
require_once __DIR__.'/../vendor/autoload.php';
$dotEnv = new Dotenv();
$dotEnv->load(__DIR__.'/../.env');
$dotEnv->populate([
'APP_ENV' => 'test',
'DATABASE_URL' => '...'
// ...
]);
в PHPUnit.XML.dist:
<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd"
bootstrap="tests/bootstrap.php" <--- set
...
>
...
</phpunit>