【问题标题】:Dotenv must be an instance of Dotenv\LoaderDotenv 必须是 Dotenv\Loader 的一个实例
【发布时间】:2019-07-22 02:27:21
【问题描述】:

我在一个 codeigniter 项目上使用 composer 从 vlucas 安装了 phpdotenv。

我也添加了钩子,如果 v3.3 需要,我会有点困惑

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

如果我不添加这个钩子,我将无法从我的 .env 文件中检索变量。如果我确实添加它,那么我会收到此错误:

消息:传递给 Dotenv\Dotenv::__construct() 的参数 1 必须是 Dotenv\Loader 实例,给定字符串,调用 C:\xampp\htdocs\test\application\config\hooks.php 第 15 行

文件名:C:\xampp\htdocs\test\vendor\vlucas\phpdotenv\src\Dotenv.php

似乎该类正在加载,但它不喜欢参数“APPPATH”,但我找到的所有文档都使用它。

任何帮助表示赞赏

【问题讨论】:

    标签: php codeigniter codeigniter-3 phpdotenv


    【解决方案1】:

    好的,因此将钩子更改为此似乎有效,我不完全确定这是正确的方法,但挖掘库代码似乎没问题。

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

    如果由于任何原因这是错误的,请告诉我。谢谢

    【讨论】:

    • 你仍然可以使用APPPATH,你有__DIR__,但是是的,这是正确的——phpdotenv 已经更新,这是新的方法。
    • ::create 对我不起作用,但正如包存储库自述文件中所述,(Dotenv\Dotenv::createImmutable(__DIR__))->load(); 这确实有效
    【解决方案2】:

    我尝试了所有解决方案,然后发现我的 phpdotenv 版本是 4.x.x。对于那些对上述解决方案不起作用的原因感到困惑的人。

    这里是加载 env 的新方法,路径为构造函数参数:

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

    【讨论】:

    • 谢谢!那行得通!由于我试图将 dotenv 与 laravel envoy 一起使用,我不得不删除代码的 '/..' 部分,因为 envoy 配置文件和 dotenv 都在同一个目录中。
    【解决方案3】:

    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 文件。 Reference Link

    享受编码。 . . !!!

    【讨论】:

    • putenv('APP_ENV='.$setEnv) 等是怎么回事?我删除了所有这些以使我的工作。
    【解决方案4】:

    做一个作曲家表演,看看包是否被加载。如果没有,请删除您的 composer.lock 文件,composer install 并再次检查。不知何故,如果您想保留 PHP 5,请将版本保持在 4 {"vlucas/phpdotenv": "4.1.0"}

    【讨论】:

      猜你喜欢
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-01
      相关资源
      最近更新 更多