Laravel 使用 env 读取环境变量为 null 的标题

不知晓咱们有没有碰到过,在 Laravel 中(除 app/config
目录下的陈设文件中)使用 env 函数读取环境变量,有时有用,有时回来
null,究竟怎么回事?让我们一研究竟。

在 Laravel 项目中,倘诺举行了 php artisan config:cache
命令把安顿文件缓存起来后,在 Tinker 中示范(Tinker 是 Laravel
自带的一个交互式命令行界面),使用 env 函数读取环境变量的值为
null,唯有执行 php artisan
config:clear
清除配置缓存后就足以读取了,那是干吗吧?

如图:

图片 1

缘由何在?#

在 Laravel 中,假诺实施 php aritisan config:cache 命令,Laravel 将会把
app/config 目录下的持有配置文件“编译”整合成一个缓存配置文件到
bootstrap/cache/config.php,每个配置文件都得以透过 env
函数读取环境变量,这里是足以读取的。可是只要有了那一个缓存配置文件,在其余地方选拔env 函数是读取不到环境变量的,所以回来 null.

让大家看看那段代码,Illuminate/Foundation/Bootstrap/DetectEnvironment.php
line 18:

public function bootstrap(Application $app)
{
    if (! $app->configurationIsCached()) {
        $this->checkForSpecificEnvironmentFile($app);

        try {
            (new Dotenv($app->environmentPath(), $app->environmentFile()))->load();
        } catch (InvalidPathException $e) {
            //
        }
    }
}

其一法子在框架启动后就会运行,那段代码表明了一旦存在缓存配置文件,就不会去设置环境变量了,配置都读缓存配置文件,而不会再读环境变量了。

因而,在布局文件即 app/config 目录下的别的地方,读取配置不要选拔 env
函数去读环境变量,那样您要是推行 php artisan config:cache 之后,env
函数就不起作用了。所有要用到的环境变量,在 app/config
目录的布置文件中通过 env
读取,其他地方要用到环境变量的都统一读配置文件而不是使用 env 函数读取。

以此题材以前遭受过后来改了写法,在 github 上一个扩大包中窥见一个
bug,发现也是这些题材造成的,跟小编反馈也认可那一点。

 

转载于:https://laravel-china.org/topics/3362/laravel-use-env-to-read-the-environment-variable-null

初稿地址:https://blog.tanteng.me/2016/12/laravel-env-null/

相关文章