The Dotenv Component


Deprecated: Function create_function() is deprecated in /home/worldhel/public_html/wp-content/plugins/codecolorer/lib/geshi.php on line 4698

Компонент Dotenv анализирует файлы .env, чтобы сделать хранимые в них переменные среды доступными через $_ENV или $_SERVER.

Установка

Установка компонента Dotenv происходит с помощью добавляния зависимомсти в Composer. Для этого в консоли:

 composer require --dev symfony/dotenv

Если вы устанавливаете этот компонент вне приложения Symfony, вам потребуется подключить файл vendor/autoload.php в вашем коде, чтобы включить механизм автозагрузки классов, предоставляемый Composer. Прочтите эту статью для более подробной информации.

Использование

Важная информация (например пароли и ключи) и параметры, зависящие от среды, должны быть определены как переменные среды (так рекомендуется для приложений с двенадцатью факторами). Использование файла .env для хранения этих переменных сред облегчает разработку и управление CI, сохраняя их в одном «стандартном» месте и независит от используемого вами технологического стека (например, встроенный сервер Nginx или PHP).

В PHP много разных реализаций этого «паттерна». Целью этой реализации является копирование того, что будет делать источник .env. Он пытается быть как можно более похожим с поведением стандартной оболочки (например, без проверки значения).

Чтобы загрузить файл .env в ваше PHP-приложение используйте Dotenv::load():

1
2
3
4
5
6
7
use Symfony\Component\Dotenv\Dotenv;

$dotenv = new Dotenv();
$dotenv->load(__DIR__.'/.env');

// Вы также можете загрузить несколько файлов
$dotenv->load(__DIR__.'/.env', __DIR__.'/.env.dev');

Для примера файл

1
<strong>.env</strong>
может содержать следующие строки:

1
2
3
4
# .env

DB_USER=root
DB_PASS=pass

Получить доступ к переменным средам в вашем приложении можно с использованием $_ENV в вашем коде:

1
2
$dbUser = $_ENV['DB_USER'];
// также можно использовать `$_SERVER`

Метод load() никогда не перезаписывает существующие переменные среды. Используйте метод overload(), если вам нужно перезаписать их:

1
2
// ...
$dotenv->overload(__DIR__.'/.env');

Работая с компонентом Dotenv, вы заметите, что вам могут потребоваться разные файлы в зависимости от среды, в которой вы работаете. Обычно это происходит для локальной разработки или непрерывной интеграции на сервера, где вы можете захотеть иметь разные файлы для своих сред тестирования и разработки.

Вы можете использовать Dotenv::loadEnv(), чтобы облегчить этот процесс:

1
2
3
4
use Symfony\Component\Dotenv\Dotenv;

$dotenv = new Dotenv();
$dotenv->loadEnv(__DIR__.'/.env');

Затем компонент Dotenv будет искать корректный файл .env для загрузки в определенном порядке, при этом файлы, загруженные позже, переопределяют переменные, определенные в ранее загруженных файлах:

  • Если файл .env существует, он загружается первым. Если нет файла .env, но есть файл .env.dist, он будет загружен вместо этого.
  • Если один из ранее упомянутых файлов содержит переменную APP_ENV, то эта переменная заполняется и в дальнейшем используется для загрузки файлов, относящихся к среде. Если APP_ENV не определен ни в одном из ранее упомянутых файлов, для APP_ENV предполагается dev и заполняется по умолчанию.
  • Если есть .env.local, представляющий общие локальные переменные среды, он будет загружен.
  • Если есть файл .env.$env.local, он загружается. В противном случае он возвращается к .env.$env.

На первый взгляд это может показаться сложным, но дает вам возможность закомитить несколько файлов, относящихся к конкретной среде, которые затем можно легко адаптировать к вашей локальной среде. Как правило, вы заполняете .env, .env.test и .env.dev для представления различных параметров конфигурации для ваших различных сред, каждый из них можно донастроить с помощью .env.local, .env.test.local и .env.dev.local. соответственно.

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

Вы можете настроить переменную, определяющую среду, например: среду по умолчанию и тестовые среды, передавая их в качестве дополнительных аргументов Dotenv::loadEnv().

Метод Dotenv :: loadEnv () был введен в Symfony 4.2.

Вы никогда не должны хранить файл .env в своем хранилище кода, так как он может содержать конфиденциальную информацию; вместо этого создайте файл .env.dist (или несколько других специфичных для среды, как показано выше) с разумными значениями по умолчанию.

Symfony Dotenv можно использовать в любой среде вашего приложения: разработка, тестирование, постановка и даже производство. Однако в производственной среде рекомендуется настраивать переменные реальной среды, чтобы избежать снижения производительности при разборе файла .env для каждого запроса.

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

source .env

Добавьте комментарии, добавив к ним префикс #:


# Database credentials
DB_USER=root
DB_PASS=pass # This is the secret password

Используйте переменные среды в значениях, добавив префикс к переменным $:

DB_USER=root 
DB_PASS=${DB_USER}pass # Include the user as a password prefix

Вставляйте команды через $() (не поддерживается в Windows):

START_TIME=$(date)

Обратите внимание, что использование $ () может не работать в зависимости от вашей оболочки.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *