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"}