web-dev-qa-db-ja.com

DotenvはDotenv \ Loaderのインスタンスである必要があります

Codeigniterプロジェクトでcomposerを使用してvlucasからphpdotenvをインストールしました。

私はフックも追加しましたが、v3.3に必要な場合は少し混乱します。

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

このフックを追加しないと、.envファイルから変数を取得できません。追加すると、次のエラーが発生します。

メッセージ:Dotenv\Dotenv :: __ construct()に渡される引数1はDotenv\Loaderのインスタンスであり、文字列を指定し、15行目のC:\ xampp\htdocs\test\application\config\hooks.phpで呼び出す必要があります

ファイル名:C:\ xampp\htdocs\test\vendor\vlucas\phpdotenv\src\Dotenv.php

クラスがロードされているようですが、パラメータ「APPPATH」は好きではありませんが、私が見つけたすべてのドキュメントはそれを使用しています。

助けてくれてありがとう

8
mrsparrow

これにフックを変更することは機能しているようです、それが正しいアプローチであるかどうかは完全にはわかりませんが、ライブラリコードを掘り下げることは問題ないようです。

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

これが何らかの理由で間違っている場合は、お知らせください。ありがとう

11
mrsparrow

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

laravel 5.8。 参照リンク で複数のenvファイルを使用する方法を詳細に確認できるリンクがあります。

コーディングをお楽しみください。 。 。 !!!

2
LibraRamis

私のcomposer.json設定

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

これは私のために働いた解決策です

bootstrap/app.phpに移動し、次のコードを更新します

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