首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dotenv必须是Dotenv\Loader的一个实例

Dotenv必须是Dotenv\Loader的一个实例
EN

Stack Overflow用户
提问于 2019-02-28 08:20:38
回答 4查看 18.1K关注 0票数 13

我在一个代码点火器项目上使用composer从vlucas安装phpdotenv。

我也添加了钩子,如果需要的话,我对v3.3有点困惑。

代码语言:javascript
复制
    $hook['pre_system'] = function() {
    $dotenv = new Dotenv\Dotenv(APPPATH);
    $dotenv->load();
};

如果我不添加这个钩子,我就无法从我的.env文件中检索变量。如果添加了它,就会得到以下错误:

消息:传递给Dotenv\Dotenv::__construct()的参数1必须是Dotenv\Loader的实例,字符串给定,在第15行的Dotenv\Dotenv::__construct中调用

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

类似乎正在加载,但它不喜欢参数"APPPATH“,但我发现的所有文档都使用这个参数。

感谢你的任何帮助

EN

回答 4

Stack Overflow用户

发布于 2019-02-28 11:12:51

好的,所以把这个钩子改变成这个似乎是有效的,我不完全确定这是正确的方法,但是深入研究库代码似乎还可以。

代码语言:javascript
复制
$hook['pre_system'] = function() {
    $dotenv = Dotenv\Dotenv::create(__DIR__);
    $dotenv->load();
}

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

票数 11
EN

Stack Overflow用户

发布于 2020-05-09 03:53:54

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

下面是以path作为构造函数param加载env的新方法:

代码语言:javascript
复制
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__.'/..');
$dotenv->load();
票数 6
EN

Stack Overflow用户

发布于 2019-06-18 09:18:40

Dotenv必须是Dotenv\Loader的一个实例

实际上,您并没有跟踪将Laravel从任何版本升级到5.8的文档,我已经在搜索了几个小时后找到了解决方案。最后我找到了解决办法。您只需在环境文件中替换此代码即可。

代码语言:javascript
复制
$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();
    }
}});

这里有一个链接,您可以在其中详细查看如何使用Laravel5.8中的多个env文件。参考链接

享受编码吧。。。!!!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54921183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档