我在一个代码点火器项目上使用composer从vlucas安装phpdotenv。
我也添加了钩子,如果需要的话,我对v3.3有点困惑。
$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“,但我发现的所有文档都使用这个参数。
感谢你的任何帮助
发布于 2019-02-28 11:12:51
好的,所以把这个钩子改变成这个似乎是有效的,我不完全确定这是正确的方法,但是深入研究库代码似乎还可以。
$hook['pre_system'] = function() {
$dotenv = Dotenv\Dotenv::create(__DIR__);
$dotenv->load();
}如果这是错误的任何原因,请告诉我。谢谢
发布于 2020-05-09 03:53:54
我尝试了所有的解决方案,然后我发现我的phpdotenv版本是4.x.x。对于那些对上述解决方案不起作用的原因感到困惑的人来说。
下面是以path作为构造函数param加载env的新方法:
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__.'/..');
$dotenv->load();发布于 2019-06-18 09:18:40
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();
}
}});这里有一个链接,您可以在其中详细查看如何使用Laravel5.8中的多个env文件。参考链接
享受编码吧。。。!!!
https://stackoverflow.com/questions/54921183
复制相似问题