使用App::environment()
对app()->environment()
对config('app.env')
判断环境有什么区别?我假设前两个是完全一样的,但是那些使用config('app.env')
的vs呢?
我可以看到,前两个返回整个服务容器实例,这对性能来说更差,但更安全吗?我读到的是,人们建议只对自己的配置变量和任何其他非env-one的配置变量使用config()
.试图找出原因.
谢谢
使用App::environment()
对app()->environment()
对config('app.env')
判断环境有什么区别?我假设前两个是完全一样的,但是那些使用config('app.env')
的vs呢?
我可以看到,前两个返回整个服务容器实例,这对性能来说更差,但更安全吗?我读到的是,人们建议只对自己的配置变量和任何其他非env-one的配置变量使用config()
.试图找出原因.
谢谢
App::environment()
和app()->environment()
是完全一样的东西.App
facade和app()
helper函数都只是访问应用程序容器的快捷方式.
在web上下文中(从浏览器点击页面),App::environment()
方法和config('app.env')
函数将返回相同的值.
在cli上下文(artisan命令、排队作业(job)等)中,App::environment()
方法和config('app.env')
函数可以返回不同的值.如果正在运行的命令使用--env
参数(例如:--env=testing
)执行,那么App::environment()
方法将返回实际检测到的环境("测试"),而config('app.env')
函数将继续返回配置文件中定义的环境.
另外要考虑两件事:
environment()
方法是公共api的一部分.这意味着只有在主要版本上才有可能打破改变.app.env
配置值不是公共api的一部分.拉维尔可以在任何时候改变这一点,如果他们愿意的话,即使是在一个小版本.我怀疑他们会,但他们没有做出公开promise .
environment()
方法采用可选参数,为测试当前环境添加一点语法糖.如果传递参数,如果您在提供的任何环境中,该方法将返回布尔值,而不是返回带有当前环境名称的字符串.这些参数也被视为正则表达式搜索:
$isTesting = App::environment('test', 'testing', 'testarossa')
// or
$isTesting = App::environment('test*')
(在运行正则表达式之前,"*"替换为"*")