Как создать переменные среды с помощью базового шаблона пакета vlucas/phpdotenv с yii2?

Я использую базовый шаблон yii 2. И я пытаюсь создавать разные среды. Например: разработка, тестирование, прод.

Итак, я установил пакет

"vlucas/phpdotenv": "^5.6"

И в корневой папке я создал файл .env с содержимым:

YII_DEBUG=1
YII_ENV=dev

DB_HOST=localhost
DB_NAME=name
DB_USER=postgres
DB_PASSWORD=pass
DB_CHARSET=utf8

и в config/db.php у меня есть это:


<?php

// phpcs:ignoreFile


$config = [
    'class' => 'yii\db\Connection',
    'dsn' => 'mysql:host=' . $_ENV['DB_HOST'] .';dbname=' . $_ENV['DB_NAME'],
    'username' => $_ENV['DB_USER'],
    'password' => $_ENV['DB_PASSWORD'],
    'charset' => $_ENV['DB_CHARSET'],
   
];

и мой web/index.php выглядит:

<?php

defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev');

require __DIR__ . '/../vendor/autoload.php';
require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';

$dotenv = Dotenv\Dotenv::createImmutable(dirname(__DIR__));
$dotenv->load();

$config = require __DIR__ . '/../config/web.php';

(new yii\web\Application($config))->run();

но если я это сделаю сейчас, PHP yii послужит. Я получаю эту ошибку:

Warning: Undefined array key "DB_HOST" in C:\repos\internet_backend\config\db.php on line 9
PHP Warning:  Undefined array key "DB_NAME" in C:\repos\internet_backend\config\db.php on line 9

Warning: Undefined array key "DB_NAME" in C:\repos\internetsuite_backend\config\db.php on line 9
PHP Warning:  Undefined array key "DB_USER" in C:\repos\internet_backend\config\db.php on line 10

Warning: Undefined array key "DB_USER" in C:\repos\internet_backend\config\db.php on line 10
PHP Warning:  Undefined array key "DB_PASSWORD" in C:\repos\internet_backend\config\db.php on line 11

Вопрос: Но как устранить эту ошибку?

У кого-нибудь есть идеи?

mightycode Newton 24.04.2024 23:11
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
1
128
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно использовать класс Dotenv\Dotenv для загрузки файла .env. Вы должны сделать это в своем файле web/index.php после загрузки автозагрузчика композитора и перед загрузкой файла конфигурации.

<?php

// comment out the following two lines when deployed to production
defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev');

require __DIR__ . '/../vendor/autoload.php';
require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';

$dotenv = Dotenv\Dotenv::createImmutable(dirname(__DIR__));
$dotenv->load();

$config = require __DIR__ . '/../config/web.php';

(new yii\web\Application($config))->run();

Возможно, вам придется аналогичным образом изменить файл yii в корне вашего проекта.

Кроме того, вокруг = в .env файле не должно быть пробелов.

#Михал Гинчица.Спасибо!! Да, я забыл изменить файл yii.php. После того, как я это сделал. Оно работает.

mightycode Newton 25.04.2024 11:09

Но у меня три разные папки: dev, test, prod. И в каждой папке у меня есть файл .env. Как выйти из окружения?

mightycode Newton 25.04.2024 11:12

Вы передаете папку, из которой загружается файл .env, в качестве параметра при вызове Dotenv\Dotenv::createImmutable(). У вас должна быть возможность изменить это там.

Michal Hynčica 25.04.2024 11:28

По этому поводу я задал еще один вопрос: stackoverflow.com/questions/78383882/…

mightycode Newton 25.04.2024 12:10

Другие вопросы по теме