Yii2 – Альтернативный способ организации environment

Один из альтернативных и наиболее удобных способов организовать настройку environment в yii2 – это воспользоваться пакетом https://github.com/vlucas/phpdotenv

Он удобен тем, что хранит все параметры (изменяемые, в зависимости от окружения) в одном маленьком файле .env, с простым и понятным синтаксисом.

Посути, это реализация на PHP аналогичного пакета для Ruby. https://github.com/vlucas/phpdotenv

Итак, как же будет организована настройка параметров окружения, при использовании phpdotenv? Далее я постараюсь это наглядно показать:

Конечно, для начала нужно установить пакет phpdotenv через composer:

Сам файл с настройками можно создать в корневом каталоге сайта:
.env – файл который не хранится в git, и содержит специальные настройки под конкретное окружение

.env.example – практически файл-копия .env, но который хранится в git, не используется в приложении и содержит лишь возможные примерные настройки, служит как подсказка для разработчиков, чтобы они знали как настроить окружение, а именно, сосздать себе свой .env файл.


Пример файла .env.example:

Поскольку пакет был поставлен через composer, его классы уже доступны в index.php после строчки

В index.php надо внести незначительные изменения:

Для удобства работы с пакетом был также добавлен хелпер с процедурными фунциями, но главная из них env().
Сам файл: helpers.php

Его следует поместить в папку helpers/ (создать её, если нету)
В index.php этот файл подключается так:

Эта строчка:

загружает в переменные $_ENV, $_SERVER все данные из файла .env в указанной директории. Но имя файла можно задать и другое (Смотрите документацию к пакету):

env('YII_DEBUG') – Извлекает данные из ключа YII_DEBUG (который задан в .env)
Таким образом можно прописать все необходимые, изменяемые в зависимости от окружения параметры, в конфигурационных файлах фреймворка.

Вот пример, как будет выглядеть config/db.php:

env('DB_USERNAME', 'root') – Второй параметр выводится по умолчанию, если вдруг в .env не указана такая переменная окружения.

Аналогичным образом изменяется и файл yii, для запуска консольного приложения:

Правки совсем небольшие, просто добавлено две строчки, и указано, откуда брать значение для YII_DEBUG.

На этом все.

Просмотров : 17113
Запись опубликована в рубрике Yii с метками , , . Добавьте в закладки постоянную ссылку.

8 комментариев: Yii2 – Альтернативный способ организации environment

  1. LAV45 говорит:

    А ничего страшного что это файл и при каждой загрузке будет читаться с диска, в то время как текущий вариант конфигов, в обычный php файл, будет закеширован в OPcache. Я уже молчу про наследование и переопределение базовых настроек.

    ЗЫ Ещё одна поделка успешно стыреная у Ruby-стов.

    • dmitry говорит:

      Сразу видно что вы никогда не имели дело с Capistrano и деплоем на несколько серверов. В этом случае данная технология очень удобна.

      А наследование конфигов – это самая ужасная мерзость которая только есть:)

      • Алексей говорит:

        Какое преимущество по сравнению с 1 таким же php файлом ввиде масива который затем так же с успехом быть запихан в evn и пр.? А вот постоянное дерганье файловой системы надеясь только на ее кеширование это просадка и для нагруженного проекта непойдет.

  2. Vlad говорит:

    Согласен с dmitry. Наследование – это ад, + плодятся много лишних файлов . Данное решение весьма изящно и реально удобно для git. Менять нужно всего один файл в случае локального разворачивания, круто, респект

  3. Денис говорит:

    or: Uncaught Error: Class ‘Dotenv’ not found

  4. Денис говорит:

    $dotenv = new Dotenv\Dotenv(“../”);
    $dotenv->load();

  5. Роман говорит:

    Спасибо, очень полезный пакет!

    Но я в index.php добавил

    $dotenv = Dotenv\Dotenv::createImmutable(__DIR__ . ‘/../’);
    $dotenv->load();
    (взял в описании с github’а)

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

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