BootstrapLaravel 以 env 读取环境变量为 null 的问题

莫亮堂大家来没有起遇上了,在 Laravel 中(除 app/config
目录下的部署文件被)使用 env 函数读取环境变量,有时有用,有时回来
null,究竟怎么回事?让我们同探究竟。

每当 Laravel 项目面临,如果实施了 php artisan config:cache
命令将安排文件缓存起来后,在 Tinker 中示范(Tinker 是 Laravel
自带的一个交互式命令行界面),使用 env 函数读取环境变量的值也
null,只有执行 php artisan
config:clear
清除配置缓存后哪怕可以读取了,这是怎么吧?

如图:

Bootstrap 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/

相关文章