使用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')函数将继续返回配置文件中定义的环境.

另外要考虑两件事:

  1. environment()方法是公共api的一部分.这意味着只有在主要版本上才有可能打破改变.app.env配置值不是公共api的一部分.拉维尔可以在任何时候改变这一点,如果他们愿意的话,即使是在一个小版本.我怀疑他们会,但他们没有做出公开promise .

  2. environment()方法采用可选参数,为测试当前环境添加一点语法糖.如果传递参数,如果您在提供的任何环境中,该方法将返回布尔值,而不是返回带有当前环境名称的字符串.这些参数也被视为正则表达式搜索:

    $isTesting = App::environment('test', 'testing', 'testarossa')
    // or
    $isTesting = App::environment('test*')
    

    (在运行正则表达式之前,"*"替换为"*")

Laravel相关问答推荐

Hostinger Laravel网站未显示错误

到查询构建器的MySQL查询

验证判断请求的值是否存在于另一个表 Laravel 9 中

将数据从控制器传递到 Laravel 中的视图

在 laravel 查询构建器中使用多个 where 子句

为什么我的 Laravel 队列作业(job)在 60 秒后失败?

如何比较laravel中的两个加密(bcrypt)密码

使用'with'时,Laravel belongsTo 返回 null

使用数据库用户提供程序时如何在 Laravel 中创建密码重置方法

Laravel 将参数从路由传递到过滤器

将 Laravel .env 变量添加到 Vue 组件

如何在包中安排 Artisan 命令?

Laravel 和 PHPStorm 项目的 gitignore 中包含什么?

如何将对象(模型类型对象)插入到 Laravel 中特定索引号的集合对象中?

调用未定义的方法 Illuminate\Routing\Route::get()

Laravel League/flysystem 使用 AWS S3 获取文件 URL

Laravel 5 Carbon 全局语言环境

assets资源不引用公用文件夹(Laravel)

在 Laravel 5.4 中将文件存储在公共目录和存储中的区别

如何获取 Laravel 块的返回值?