问下laravel 的 env() 函数为啥获取不到 .env 里面的值?
我在控制器里面使用
env(‘url’);//获取不到url的值,但是我在.env里面明明已经设置了url的值了。
然后我在 config/app.php 里面设置了 ‘url’ => env(‘url’, ‘’)
然后我用php artisan cache:clear 后在 bootstarp 里面的 config.php 里面是能看到 url的值的?
为啥到了控制器里面获取不到,配置文件里面能获取到的?
这是因为缓存了,除了在config里面用 env,其它的地方读取配置的时候统一使用config函数
避免在
app/config/*
目录外使用env函数在 Laravel 中,如果执行
php aritisan config:cache
命令 (生产环境为了提高配置加载速度),Laravel 将会把app/config
目录下的所有配置文件 “编译” 整合成一个缓存配置文件到bootstrap/cache/config.php
,每个配置文件都可以通过 env 函数读取环境变量,这里是可以读取的。但是一旦有了这个缓存配置文件,在其他地方使用 env 函数是读取不到环境变量的,所以返回 null.让我们看看这段代码,Illuminate/Foundation/Bootstrap/LoadEnvironmentVariables.php line 25:
这个方法在框架启动后就会运行,这段代码说明了如果存在缓存配置文件,就不会去设置环境变量了,配置都读缓存配置文件,而不会再读环境变量了。
因此,在配置文件即
app/config
目录下的其他地方,读取配置不要使用 env 函数去读环境变量,这样你一旦执行php artisan config:cache
之后,env 函数就不起作用了。所有要用到的环境变量,在app/config
目录的配置文件中通过 env 读取,其他地方要用到环境变量的都统一读配置文件而不是使用 env 函数读取。更多注意事项可在这里查看 www.kancloud.cn/wenshunbiao/wenshu...
骚操作啊
生成配置缓存会导致 env 取不到数据,生产环境一般都会生成配置缓存。正确的做法是除了配置和服务提供者中使用 env 函数,其他地方请使用 config 函数替代。
把你参数放到 config app下面加个你用的参数就好了么