web-dev-qa-db-fra.com

Dotenv doit être une instance de Dotenv \ Loader

J'ai installé phpdotenv depuis vlucas en utilisant composer sur un projet codeigniter.

J'ai également ajouté le crochet que je suis un peu confus si nécessaire pour la v3.3

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

Si je n'ajoute pas ce crochet, je ne peux pas récupérer les variables de mon fichier .env. Si je l'ajoute, j'obtiens cette erreur:

Message: L'argument 1 transmis à Dotenv\Dotenv :: __ construct () doit être une instance de Dotenv\Loader, chaîne donnée, appelée dans C:\xampp\htdocs\test\application\config\hooks.php à la ligne 15

Nom de fichier: C:\xampp\htdocs\test\vendor\vlucas\phpdotenv\src\Dotenv.php

On dirait que la classe se charge mais elle n'aime pas le paramètre "APPPATH" mais toute la documentation que j'ai trouvée l'utilise.

Toute aide appréciée

8
mrsparrow

Ok donc changer ce crochet semble fonctionner, je ne suis pas sûr que ce soit la bonne approche mais creuser dans le code de la bibliothèque semble ok.

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

Si cela ne va pas pour quelque raison que ce soit, faites-le moi savoir. Merci

11
mrsparrow

Dotenv doit être une instance de Dotenv\Loader

En fait, vous ne suivez pas la documentation de la mise à niveau Laravel de n'importe quelle version à 5.8, j'ai trouvé une solution après quelques heures de recherche. Enfin j'ai trouvé la solution. Il vous suffit de remplacer ce code dans votre environnement fichier.

$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();
    }
}});

Voici un lien où vous pouvez vérifier en détail comment utiliser plusieurs fichiers env dans laravel 5.8. Lien de référence

Profitez du codage. . . !!!

2
LibraRamis

Ma configuration composer.json

"require": {
   "php" : "^7.2",
   "laravel/Lumen-framework" : "^6.0",
   "vlucas/phpdotenv" : "~3.3"
}

Voici la solution qui a fonctionné pour moi

Aller à bootstrap/app.php, mettez à jour le code suivant

try{
   $dotenv = Dotenv\Dotenv::create(dirname(__DIR__));
   $dotenv->load();
}catch(Dotenv\Exception\InvalidPathException $e){
   $e->getMessage();
}
0
Vipertecpro