使用 env('APP_ENV')、config('app.env') 或 App::environment() 获取应用程序环境有什么区别?

2023-12-27

使用上有什么区别env('APP_ENV'), config('app.env') or App::environment()获取应用程序环境?

我知道env('APP_ENV')愿意$_ENV, config('app.env')读取配置并App::environment()是一切的抽象。在我看来,优势甚至就在于此。抽象.

我不知道是否还有其他差异,例如性能或安全级别


简而言之,2022 年最新情况:

  • use env()仅在配置文件中

  • use App::environment()用于检查环境(.env 中的 APP_ENV)。

  • use config('app.var')对于所有其他环境变量,例如:config('app.debug')

  • 为您自己的 ENV 变量创建自己的配置文件。例子:
    在你的 .env 中:

    MY_VALUE=foo

example config/myconfig.php

return [
    'myvalue' => env('MY_VALUE', 'bar'), // 'bar' is default if MY_VALUE is missing in .env
];

在您的代码中访问:

config('myconfig.myvalue') // will result in 'foo'

解释和历史:

我只是感觉了一下。当您缓存配置文件时,env()会(有时?)无法正常工作。所以我发现:

  1. Laravel 建议仅使用env()在配置文件中。使用config()代码中的助手而不是env()。例如你可以打电话config('app.env')在你的代码中。
  2. 当你使用php artisan config:cache所有配置字符串都由框架缓存,并且您对配置进行的任何更改.env在运行以下命令之前,文件不会处于活动状态php artisan config:cache再次命令。

From 本文 https://laracasts.com/discuss/channels/general-discussion/env-not-reading-variables-sometimes在 Laracast 上:

UPDATE:
env()只要您不使用,通话就可以使用php artisan config:cache。所以这是非常危险的,因为它经常在开发时起作用但在生产时会失败. See 升级指南 https://laravel.com/docs/5.2/upgrade#upgrade-5.2.0

缓存和环境

如果您在部署期间使用 config:cache 命令,则必须 确保您只从您的内部调用 env 函数 配置文件,而不是来自应用程序中的其他任何地方。

如果您从应用程序内调用 env,则强烈要求 建议您在配置中添加适当的配置值 文件并从该位置调用 env,从而允许您转换 你的环境调用配置调用。

更新 Laravel 5.6:
Laravel 现在在其推荐中文档 https://laravel.com/docs/9.x/configuration#determining-the-current-environment to use

$environment = App::environment();

// or check on an array of environments:
if (App::environment(['local', 'staging'])) {
    // The environment is either local OR staging...
}

and 描述 https://laravel.com/docs/9.x/configuration#retrieving-environment-configuration that env()只是从中检索值.env在配置文件中,例如config('app.env') or config('app.debug').

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 env('APP_ENV')、config('app.env') 或 App::environment() 获取应用程序环境有什么区别? 的相关文章

  • Laravel 5 - URL 查询字符串的 NGINX 服务器配置问题

    Laravel 没有从 URL 查询字符串接收任何 GET 变量 GET 和 Input all 为空 Example example app ex login php country US country US 从未出现在我的 GET 变
  • Laravel 集成测试:如何断言一个 URL 已被调用但另一个 URL 没有

    我想测试一个向某个 URL 发出请求的控制器 例如 http example com api say hello 但它不会向另一个 URL 发出请求 例如 http example com api say bye bye 我想测试的控制器功
  • 如何将 Laravel 5.4 与 Angular 4 集成

    我知道如何创造完整的拉拉维尔 5 4自己的项目 我也知道如何使用创建 SPA角4 Problem 我不知道如何将 Laravel 与 Angular 集成 另外 我想使用 Laravel 5 4 作为后端 使用 Angular 4 作为前端
  • 限制自己超载外部 API 的速率

    我发现了很多信息和脚本示例 展示了如何对 API 用户进行速率限制 但我无法找到任何示例来说明在施加这些限制时如何对您自己的 API 请求进行速率限制 我总是用诸如以下的代码来限制我的脚本sleep or usleep命令 但感觉这是一种低
  • 在 Eloquent 中定义自定义属性

    我的数据库中有 3 个不同的字段 city state country 如何在 Eloquent 中定义另一个属性以从这 3 个字段返回一个字符串 第一种方法 但不起作用 protected address public function
  • Laravel leftJoin 仅右表的最后一条记录

    我是 Laravel 的新手 我有两张桌子 1 产品 2 价格 products id product int p key name varchar prices id price int p key id product int
  • GNU 屏幕:环境变量

    更新 问题与问题相关GNU Screen 程序员在 Readbuf 中引用的内容 https stackoverflow com questions 1318186 gnu screen programmer quotes in readb
  • 如何使用更新资源控制器 laravel 4?

    我有带有索引 编辑 更新方法的客户控制器 Route resource customer CustomerController 控制器方法更新 public function update id echo id 我的 HTML 表单
  • 分页在服务器端好还是前端好? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在构建 Laravel Vue 应用程序 我想知道在后端使用分页还是在前端使用分页更好 我认为最好在每页发送尽可能少的数据的请求 但我想听听
  • PHP Laravel:未找到特征

    我在命名空间和使用方面遇到一些问题 我收到此错误 未找到特征 Billing BillingInterface 这些是我的 Laravel 应用程序中的文件 计费 php namespace Billing BillingInterface
  • Laravel 保存文件将其发布为 bin 文件

    我试图在 laravel 中保存文件 但它最终被保存为 bin 文件 file request gt file file name Carbon now gt format Y m d strtotime Carbon now file g
  • 命令“tinker”未定义

    从 5 3 升级到 5 4 后 请按照说明操作 为了继续使用 Tinker Artisan 命令 您还应该安装 laravel tinker 软件包 composer require laravel tinker 安装软件包后 您应该添加
  • 如何使用 Laravel IoC 将数据库注入构造函数

    我想使用 DB 类与 IoC 容器进行事务处理 use Illuminate Database Connection as DB public function construct DB db this gt db db 但是当使用 db
  • 当我启动 Windows 命令提示符时,我做了什么导致环境变量发生更改?

    我使用的是 Windows 10 x64 我安装了 Anaconda3 如果我启动 C Windows system32 cmd exe 时没有运行任何其他内容 并且在我可以看到的后台中没有任何有趣的内容 则以下内容将添加到控制面板 UI
  • Laravel 5 命名空间

    我刚刚下载了 Laravel 5 并开始迁移到它 但是 我发现需要使用命名空间really恼人的 除了让我的代码变得混乱之外 我觉得我没有从中得到太多东西 如何禁用命名空间要求 我认为您不应该禁用或删除名称空间 命名空间的主要原因是避免与同
  • Laravel 计划命令一旦启动就停止?

    我已经为 laravel 5 1 项目设置了预定命令 它有效 命令已经启动 但愚蠢的是我没有考虑如何停止它 通常您不想停止它 但该命令正在向数据库表中插入近 50 万行 而我只是想确保我可以在不登录服务器的情况下启动它 显然我需要在某个时候
  • Laravel 从 5.6 升级到 Laravel 6

    我有一个项目https github com javedbaloch4 Laravel Booking https github com javedbaloch4 Laravel Booking发展于Laravel 5 6现在我想将其升级到
  • Rails 4.1 环境变量未重新加载

    我创建了一个application yml文件在配置目录中并添加了一些键值对 即AWS REGION us east 1 我还添加了以下内容application rb读取文件并更新 ENV 哈希 if Rails env developm
  • Laravel 验证 如果勾选复选框,则需要输入文本?

    我一直在阅读 Laravel 验证文档 我不清楚如何结合两个规则 例如
  • 在 apache docker 容器中运行虚拟主机

    我在同一个 apache 容器中有两个 php 应用程序 我试图在端口上运行其中一个应用程序 因为它需要通过根域而不是子文件夹进行访问 我想在端口 8060 上运行应用程序 我尝试使用 apache 虚拟主机执行此操作 但它不会加载页面 h

随机推荐

  • 每种类型都有独特的变质作用吗?

    最近我终于开始觉得我理解了变形论 我写了一些关于他们的文章最近的一个答案 https stackoverflow com a 46555360 625403 但简单地说 类型的变形是递归遍历该类型的值的过程的抽象 该类型上的模式匹配具体化为
  • Yii2 重定向到上一页

    现在我的应用程序正在使用 gridview 列出所有信息 并且它也有分页 当用户单击分页号 然后单击编辑然后保存时 它将用户重定向到查看页面 我想做的是将用户重定向到上一页 带有分页号的网址 你可以使用Yii app gt request
  • 检测更改的输入文本框

    我查看了许多其他问题并找到了非常简单的答案 包括下面的代码 我只是想检测有人更改文本框的内容 但由于某种原因它不起作用 我没有收到控制台错误 当我在浏览器中设置断点时change 函数它永远不会击中它 inputDatabaseName c
  • System.Net.Mail 引用不存在

    我在创建发送电子邮件的应用程序时遇到问题 我已经有一个作为 Windows 窗体应用程序工作 然后决定从空项目中执行相同的操作 因为我现在需要创建一个后台应用程序 我用的是System Net MailWindows 窗体中的名称空间 然后
  • 跨浏览器事件处理

    我需要一个跨浏览器功能来注册事件处理程序和 大部分 一致的处理程序体验 我不需要 jQuery 等库的全部功能或功能 因此我编写了自己的库 我相信我已经用下面的代码实现了我的目标 到目前为止我的测试已经成功 但我已经盯着它太久了 我的逻辑是
  • Android ListView 与简单适配器

    我创建ListView列出从服务器检索的一些数据的活动 这是列出Atm活动 public class ListAtmActivity extends ListActivity private static String url http 1
  • 在 C# 中创建 MS Teams 团队 - AddAsync 返回 null

    Context 我正在使用 C 中的 MS Graph API 创建新的 MS Teams 团队 My code var newTeam new Team DisplayName model DisplayName Description
  • 如何将两个 MySQL 列合并为一列?

    我想转换这个 MySQL 表 title1 title2 type qwe1 qwe2 3 asd1 asd2 7 PHP 中的此表 title type asd1 7 asd2 7 qwe1 3 qwe1 3 但我不知道如何按第一列正确排
  • History.js - 正确的实现

    我使用 JQuery Ajax 在名为 container 的 div 中加载网站上的内容 我必须有不同类型的链接 正常锚链接 JQuery 触发器 当单击特定 div 时触发事件 现在我想添加功能来支持后退和前进浏览器按钮以及书签功能 我
  • 如何加快 MongoDB 视图上的计数

    我一直在排查为什么我创建的 MongoDB 视图如此慢 该视图的目标是transactions集合 并返回具有openBalance大于0 我还运行一些额外的聚合阶段来按照我想要的方式塑造数据 为了加快视图的执行速度 它通过匹配视图聚合管道
  • 服务的任何公共方法的 AOP 切入点表达式

    什么是最简单的切入点表达式 它将拦截所有带有注释的bean的所有公共方法 Service 例如 我希望它会影响该 bean 的两个公共方法 Service public MyServiceImpl implements MyService
  • SVN对单个文件的权限

    SVN 是否可以为单个文件设置写权限 而存储库的其余部分都是只读的 另一种可能性是预提交挂钩脚本 http svnbook red bean com en 1 5 svn ref reposhooks pre commit html
  • 计算特定范围sql server的记录数

    我正在尝试编写一个查询来根据多个不同范围来计算记录数 我成功使用了union 但我觉得有更好的方法来做到这一点 这是我所做的 select count col1 as range1 from tbl1 where col1 lt 15000
  • 将 IOS 应用程序从一个帐户的 Testflight 转移到另一个帐户

    App is 未发表在 App Store 上 但通过以下方式分发给测试人员试飞在以前的帐户上 现在我必须将应用程序转移到新帐户 具有相同的捆绑包标识符 我可以将其放置在具有相同捆绑包标识符的新帐户中吗 转移应用程序的程序是什么 因为它在
  • 如何格式化 MongoEngine PointField 的数据

    所以我想用mongodb中的位置数据做一些实验 所以我写了一些python代码来生成一些测试数据 不幸的是 文档位于http docs mongoengine org apireference html mongoengine fields
  • 获取应用程序共享意图的包名称

    我想获取创建共享意图的应用程序名称或其包名称 我正在制作通过意图接收共享数据的应用程序 如何获取创建者应用程序的包名称 类似于 intent getSourceBackageName EDIT 我不确定我的问题是否清楚 但我需要找出调用我的
  • Git clean 排除嵌套子目录

    我在使用 git clean 和排除嵌套目录选项时遇到问题 我想从存储库中清除所有未提交的文件 不包括vendor bundle为了 我的测试报告如下 debugg dir git file txt not commited file no
  • Javascript整数从零开始[重复]

    这个问题在这里已经有答案了 我有一个关于 javascript 如何解析以零开头的整数 例如银行帐号 的问题 下面是来自 Chrome 开发工具的简单示例 var zeroTest 022 undefined zeroTest 18 为什么
  • R.java 无法为 Android 库应用程序正确生成

    我创建了一个简单的 Android 库应用程序 其中只有 1 个包含 TextView 的活动 它工作正常 但是当我将其标记为库并在另一个应用程序中引用时 当我尝试使用 findViewById R id welcome textview
  • 使用 env('APP_ENV')、config('app.env') 或 App::environment() 获取应用程序环境有什么区别?

    使用上有什么区别env APP ENV config app env or App environment 获取应用程序环境 我知道env APP ENV 愿意 ENV config app env 读取配置并App environment