首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel (vlucas/phpdotenv)动态更改env值

Laravel (vlucas/phpdotenv)动态更改env值
EN

Stack Overflow用户
提问于 2021-03-24 14:32:05
回答 1查看 150关注 0票数 0

在我的测试用例中,我尝试更改一些环境变量以创建更好的测试用例覆盖率。

Laravel默认只支持通过env($key, $default = null)获取环境变量,不能更改变量。

Illuminate\Support\Env仅支持get,不支持set

此外,默认情况下,Laravel使用vlucas/phpdotenv来管理环境变量。他们中的大多数都在使用ImmutableWriter

有没有什么简单的方法来支持动态变化的环境变量存储在ImmutableWriter中。

同样,出于安全原因,该解决方案没有必要(也不应该)在生产中实现。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-24 14:32:05

PHP 7+闭包有一些有趣的特性,可以绕过私有/受保护的检查。然而,它非常老套,对于编写的测试用例来说相当不错。

代码语言:javascript
复制
use Illuminate\Support\Env;

function resetEnvValue($name, $value)
{
    $environmentRepository = Env::getRepository();

    $fn = function () use ($name, $value) {
        $fn = function() use ($name, $value) {
            $this->writer->write($name, $value);
        };
        $fn->call($this->writer);
    };
    $fn->call($environmentRepository);
}

resetEnvValue('TIMER', 1);

var_dump(env('TIMER')); // int(1)

resetEnvValue('TIMER', 2);

var_dump(env('TIMER')); // int(2)

请不要使用它的生产环境,上面的代码只适合测试,因为它绕过了所有的ImmutableWriter保护。

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

https://stackoverflow.com/questions/66775841

复制
相关文章

相似问题

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