配置信息

未匹配的标注

配置

介绍

Laravel 框架的所有配置文件都存放在 config 目录下,每个配置项都有文档,你可以整体阅读下所有这些配置文件来熟悉配置项的作用和位置。

这些配置文件允许你配置数据连接信息、邮箱服务器信息、以及很多其他核心配置信息,比如应用时区、加密密钥等。

环境配置

基于应用运行的环境不同设置不同的配置值能够给我们开发带来极大的方便,比如,我们通常在本地和线上环境配置不同的缓存驱动,这一功能在 Laravel 中很容易实现。

Laravel 使用 PHP 扩展库 DotEnv 来实现这一功能,在新安装的 Laravel 中,根目录下有一个 .env.example 文件,如果 Laravel 是通过 Composer安装的,那么该文件已经被重命名为 .env,否则的话你要自己手动重命名该文件。

Laravel的默认.env文件包含一些常用的配置值,这些配置值可能会根据您的应用程序是在本地运行还是在生产Web服务器上运行而有所不同。 在 Laravelconfig目录下,各种配置使用env函数检索.env文件的这些配置值。

如果是团队开发,你可能希望应用程序中包含 .env.example 文件。因为通过在 .env.example 文件中放置占位值,团队中的其他开发人员可以清楚地看到运行应用程序需要哪些环境变量。

技巧:.env 文件中的所有变量都可被外部环境变量(比如服务器级或系统级环境变量)所覆盖。

env文件的安全

你的 env 文件不应该提交到版本管理器中,首先,使用应用程序的每个开发人员/服务器可能需要不同的环境配置。其次,如果入侵者获得了对版本管理器的访问权限,这将成为一个安全风险,他将能看到配置文件中的敏感数据。

环境变量类型

.env 文件中的所有变量都被解析为字符串,因此创建了一些保留值以允许你从 env() 函数中返回更多类型的变量:

.env env()
true (bool) true
(true) (bool) true
false (bool) false
(false) (bool) false
empty (string) ‘’
(empty) (string) ‘’
null (null) null
(null) (null) null

如果你需要使用包含空格的值定义环境变量,可以通过将值括在双引号中来实现。

APP_NAME="我的 应用"

获取环境配置

当应用程序收到请求时,.env 文件中列出的所有变量将被加载到 PHP 的超级全局变量 $_ENV 中。你可以使用 env 函数检索这些变量的值。实际上,如果你看过 Laravel 的配置文件,就能注意到有数个选项已经使用了这个函数:

'debug' => env('APP_DEBUG', false),

env 函数的第二个参数是「默认值」. 当没有找到对应环境变量时将返回 「默认值」

获取当前环境配置

当前应用的环境配置是从你的 .env 文件中的 APP_ENV 变量配置的 。你可以通过 App 门面(facade)environment 函数获取:

use Illuminate\Support\Facades\App;

$environment = App::environment();

你还可以将参数传递给 environment 函数,以确定当前环境是否匹配给定的值. 当环境匹配给参数它将返回 true

if (App::environment('local')) {
    // 当前环境是 local
}

if (App::environment(['local', 'staging'])) {
    // 当前环境是 local 或 staging ...
}

技巧:通过定义一个服务器级的 APP_ENV 环境变量,可以覆盖当前的应用程序环境。

访问配置值

你可以轻松地在应用程序的任何位置使用全局 config 函数来访问配置值。配置值的访问可以使用「点」语法,这其中包含了要访问的文件和选项的名称。还可以指定默认值,如果配置选项不存在,则返回默认值。

$value = config('app.timezone');

// 如果配置值不存在,返回一个默认值
$value = config('app.timezone', 'Asia/Seoul');

若要应用在运行时修改配置,请使用config函数的数组形式 :

config(['app.timezone' => 'America/Chicago']);

配置缓存

为提高应用程序的速度,您应该使用 config:cache 命令。 这将把应用程序的所有配置信息组合到一个可以由框架快速加载的缓存文件中。

你通常应该运行 php artisan config:cache 命令作为生产部署过程的一部分。因为在应用程序的开发过程中经常需要更改配置选项,所以你不该在本地开发期间中运行该命令。

注意:如果在部署过程中执行 config:cache 命令,那么你应该确保只从配置文件内部调用 env 函数。一旦配置被缓存,.env 文件将不再被加载,所有对 env 函数的调用都将返回 null

调试模式

通过在 config/app.php 文件中配置 debug 属性可以将应用的错误信息展示给用户. 一般情况下在你可以在 .env 文件中的 APP_DEBUG 变量来配置它

在本地开发环境中,您应该将 APP_DEBUG 变量设置为 true在你的生产环境中应设置为 false。 如果你在生产环境中设置为 true 您可能会将敏感的配置值暴露给应用程序的最终用户

维护模式

当你的应用处于维护模式, 它将应用程序的所有请求渲染为一个自定义视图。 当您的应用程序正在更新或执行维护时,你可以方便的「停止」系统的运行。 维护模式检查包含在应用程序的默认中间件堆栈中。 如果应用程序处在维护模式,应用将抛出 MaintenanceModeException 异常并返回状态码 503。

要启用维护模式,只需执行下面的 Artisan 的 down 命令:

php artisan down

你还可以向 down 命令提供 retry 选项。该选项 retry 值可用于设置 HTTP 请求头中 Retry-After 的值:

php artisan down --retry=60

绕过维护模式

即使在维护模式下,你也可以使用 secret 选项指定维护模式的绕过令牌:

php artisan down --secret="1630542a-246b-4b66-afa1-dd72a4c43515"

将应用程序置于维护模式后,您可以访问与该令牌匹配的应用程序 URL,Laravel 将为您的浏览器颁发一个维护模式绕过 cookie:

https://example.com/1630542a-246b-4b66-afa1-dd72a4c43515

当访问这个隐藏的路由时,您将被重定向到应用程序的 / 路由。一旦 cookie 被颁发到您的浏览器,您将能够正常浏览应用程序,就好像它没有处于维护模式一样。

预渲染维护模式视图

如果在部署环境中使用 php artisan down 命令,当你的 Composer 依赖或其基础组件更新的时候,你的用户也可能遇到偶然性的错误。这是因为 Laravel 框架的重要部分必须启动才能确定应用程序处于维护模式,并使用模板引擎呈现维护模式视图。

因此,Laravel 允许您预渲染一个维护模式视图,该视图将在请求周期的最开始返回。此视图在加载应用程序的任何依赖项之前呈现。可以使用 down 命令的 render 选项预渲染所选模板:

php artisan down --render="errors::503"

重定向维护模式请求

在维护模式下,Laravel 将显示用户试图访问的所有应用程序 url 的维护模式视图。如果你愿意,你可以指示 Laravel 重定向所有请求到一个特定的 URL。这可以使用 redirect 选项来实现。例如,你可能希望将所有请求重定向到 / URI:

php artisan down --redirect=/

禁用维护模式

要禁用维护模式,请使用 up 命令:

php artisan up

技巧:你可以通过在 resources/views/errors/503.blade.php 中定义自己的模板来自定义默认的维护模式模板。

维护模式 & 队列

当应用程序处于维护模式时,将不会处理任何 队列任务。一旦应用程序退出维护模式,这些任务将继续处理。

维护模式的替代方法

由于维护模式要求你的应用程序有几秒钟的停机时间,因此你可以考虑使用 Laravel VaporEnvoyer 等替代方案来实现Laravel 零停机部署。

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://learnku.com/docs/laravel/8.5/con...

译文地址:https://learnku.com/docs/laravel/8.5/con...

上一篇 下一篇
Summer
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
贡献者:10
讨论数量: 0
发起讨论 只看当前版本


暂无话题~