Dotenv должен быть экземпляром Dotenv\Loader

Я установил phpdotenv из vlucas, используя composer для проекта codeigniter.

Я также добавил хук, который я немного запутался, если это необходимо для v3.3

    $hook['pre_system'] = function() {
    $dotenv = new Dotenv\Dotenv(APPPATH);
    $dotenv->load();
};

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

Сообщение: Аргумент 1, передаваемый в Dotenv\Dotenv::__construct(), должен быть экземпляром Dotenv \ Loader, заданной строки, вызываемой в C:\xampp\htdocs\test\application\config\hooks.php в строке 15

Имя файла: C:\xampp\htdocs\test\vendor\vlucas\phpdotenv\src\Dotenv.php

Кажется, класс загружается, но ему не нравится параметр "APPPATH", но вся документация, которую я нашел, использует это.

Любая помощь приветствуется

4 ответа

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

$hook['pre_system'] = function() {
$dotenv = Dotenv\Dotenv::create(__DIR__);
$dotenv->load();

Если по какой-либо причине это не так, пожалуйста, дайте мне знать. Спасибо

Я попробовал все решения, после чего обнаружил, что моя версия phpdotenv была 4.xx. Для тех, кто не понимает, почему приведенные выше решения не работают.

Вот новый способ загрузить env с помощью пути в качестве параметра конструктора:

$dotenv = Dotenv\Dotenv::createImmutable(__DIR__.'/..');
$dotenv->load();

Dotenv должен быть экземпляром Dotenv\Loader

На самом деле вы не следуете документации по обновлению Laravel с любой версии до версии 5.8, я нашел решение после нескольких часов поиска. Наконец я нашел решение. Вам просто нужно заменить этот код в файле среды.

$env = $app->detectEnvironment(function(){
$environmentPath = __DIR__.'/../.env';
$setEnv = trim(file_get_contents($environmentPath));
if (file_exists($environmentPath))
{
    putenv('APP_ENV='.$setEnv);
    if (getenv('APP_ENV') && file_exists(__DIR__.'/../.' .getenv('APP_ENV') .'.env')) {
        $dotenv = Dotenv\Dotenv::create(__DIR__.'/../', '.'.getenv('APP_ENV').'.env');
        $dotenv->overload();
    }
}});

Вот ссылка, по которой вы можете подробно проверить, как использовать несколько файлов env в laravel 5.8. Ссылка Ссылка

Наслаждайтесь кодированием. . .!!!

сделайте шоу композитора, чтобы увидеть, загружен ли пакет. если нет, удалите файл composer.lock, установите композитор и проверьте снова. По какой-то причине, если вы хотите оставить PHP 5, оставьте версию 4 {"vlucas/phpdotenv": "4.1.0"}

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