跳至内容

警告 您正在浏览 Laravel 旧版本的文档。 考虑将你的项目升级到 Laravel 12.x

配置

介绍

Laravel 框架的所有配置文件都存储在 config 目录。每个选项都有文档记录,因此请随意浏览文件并熟悉可用的选项。

这些配置文件允许您配置数据库连接信息、邮件服务器信息以及其他各种核心配置值(例如应用程序 URL 和加密密钥)。

about 命令

Laravel 可以通过以下方式显示应用程序配置、驱动程序和环境的概述: about 工匠指挥。

1 php 工匠 关于

如果你只对应用程序概述输出的特定部分感兴趣,你可以使用 --only 选项:

1 php 工匠 关于 --only=环境

或者,要详细探索特定配置文件的值,您可以使用 config:show Artisan 命令:

1 php 工匠 配置:显示 数据库

环境配置

根据应用程序运行的环境使用不同的配置值通常会很有帮助。例如,您可能希望在本地使用与生产服务器不同的缓存驱动程序。

为了使这变得简单,Laravel 利用 点环境 PHP 库。在全新安装的 Laravel 中,应用程序的根目录将包含一个 .env.example 定义许多常见环境变量的文件。在 Laravel 安装过程中,此文件将自动复制到 .env

Laravel 的默认 .env 文件包含一些常见的配置值,这些值可能因应用程序是在本地运行还是在生产 Web 服务器上运行而有所不同。然后,​​这些值由 config 使用 Laravel 的目录 env 功能。

如果你正在与团队一起开发,你可能希望继续包括和更新 .env.example 文件与您的应用程序一起运行。通过在示例配置文件中放置占位符值,团队中的其他开发人员可以清楚地看到运行应用程序所需的环境变量。

您的任何变量 .env 文件可以被外部环境变量(例如服务器级或系统级环境变量)覆盖。

环境文件安全

你的 .env 文件不应提交到应用程序的源代码控制中,因为使用应用程序的每个开发人员/服务器可能需要不同的环境配置。此外,如果入侵者获得源代码控制存储库的访问权限,这将带来安全风险,因为任何敏感凭据都会暴露。

但是,可以使用 Laravel 的内置加密来加密你的环境文件 环境加密 . 加密的环境文件可以安全地放置在源代码控制中。

附加环境文件

在加载应用程序的环境变量之前,Laravel 会确定 APP_ENV 环境变量已从外部提供,或者 --env 已指定 CLI 参数。如果是这样,Laravel 将尝试加载 .env.[APP_ENV] 文件是否存在。如果不存在,则默认 .env 文件将被加载。

环境变量类型

你的所有变量 .env 文件通常被解析为字符串,因此创建了一些保留值,以允许您从中返回更广泛的类型 env() 功能:

.env 价值 env() 价值
真的 (布尔值)真
(真的) (布尔值)真
错误的 (布尔值)false
(错误的) (布尔值)false
空的 (细绳) ''
(空的) (细绳) ''
无效的 (空) 空
(无效的) (空) 空

如果您需要定义一个包含空格的值的环境变量,则可以通过将值括在双引号中来实现:

1 应用程序名称 = 我的申请

检索环境配置

所有变量均列在 .env 文件将加载到 $_ENV 当您的应用程序收到请求时,PHP 超全局。但是,您可以使用 env 函数用于从配置文件中的这些变量中检索值。事实上,如果你查看 Laravel 配置文件,你会注意到许多选项已经在使用这个函数:

1 调试 => 环境 APP_DEBUG , 错误的 ),

传递给 env function 是“默认值”。如果给定键不存在环境变量,则返回此值。

确定当前环境

当前应用环境通过 APP_ENV 变量来自你的 .env 文件。您可以通过 environment 方法上的 App 正面 :

1 使用 照亮\支撑\外墙\ 应用程序 ;
2
3 $环境 = 应用程序 :: 环境 ();

您还可以将参数传递给 environment 方法来确定环境是否与给定值匹配。该方法将返回 true 如果环境与任何给定的值匹配:

1 如果 应用程序 :: 环境 当地的 )){
2 // 环境是本地的
3 }
4
5 如果 应用程序 :: 环境 ([ 当地的 , 分期 ])){
6 // 环境要么是本地的,要么是暂存的......
7 }

可以通过定义服务器级的 APP_ENV 环境变量。

加密环境文件

未加密的环境文件绝不应存储在源代码控制中。但是,Laravel 允许您加密环境文件,以便可以安全地将它们与应用程序的其余部分一起添加到源代码控制中。

加密

要加密环境文件,您可以使用 env:encrypt 命令:

1 php 工匠 环境:加密

运行 env:encrypt 命令将加密你的 .env 文件并将加密内容放在 .env.encrypted 文件。解密密钥显示在命令的输出中,应存储在安全的密码管理器中。如果您想提供自己的加密密钥,可以使用 --key 调用命令时的选项:

1 php 工匠 环境:加密 --key=3UVsEgGVK36XN82KKeyLFMhvosbZN1aF

提供的密钥长度应与所用加密密码所需的密钥长度相匹配。默认情况下,Laravel 将使用 AES-256-CBC 密码需要 32 个字符的密钥。您可以自由使用 Laravel 支持的任意密码 加密器 通过 --cipher 调用命令时的选项。

如果你的应用程序有多个环境文件,例如 .env.env.staging ,您可以通过提供环境名称来指定应加密的环境文件 --env 选项:

1 php 工匠 环境:加密 --env=暂存

解密

要解密环境文件,您可以使用 env:decrypt 命令。此命令需要解密密钥,Laravel 将从 LARAVEL_ENV_ENCRYPTION_KEY 环境变量:

1 php 工匠 环境:解密

或者,可以通过以下方式直接向命令提供密钥: --key 选项:

1 php 工匠 环境:解密 --key=3UVsEgGVK36XN82KKeyLFMhvosbZN1aF

env:decrypt 命令被调用时,Laravel 将解密 .env.encrypted 文件并将解密的内容放在 .env 文件。

--cipher 可以向 env:decrypt 命令以使用自定义加密密码:

1 php 工匠 环境:解密 --key=qUWuNRdfuImXcKxZ --密码=AES-128-CBC

如果你的应用程序有多个环境文件,例如 .env.env.staging ,您可以通过提供环境名称来指定应该解密的环境文件 --env 选项:

1 php 工匠 环境:解密 --env=暂存

为了覆盖现有的环境文件,您可以提供 --force 的选项 env:decrypt 命令:

1 php 工匠 环境:解密 - 力量

访问配置值

您可以使用以下方式轻松访问您的配置值 Config 外观或全局 config 函数可从应用程序的任何地方调用。可以使用“点”语法访问配置值,其中包括文件的名称和要访问的选项。还可以指定默认值,如果配置选项不存在,则返回默认值:

1 使用 照亮\支撑\外墙\ 配置 ;
2
3 $值 = 配置 :: 得到 应用程序时区 (英文):
4
5 $值 = 配置 应用程序时区 (英文):
6
7 // 如果配置值不存在,则检索默认值...
8 $值 = 配置 应用程序时区 , 亚洲/首尔 (英文):

要在运行时设置配置值,您可以调用 Config 立面的 set 方法或将数组传递给 config 功能:

1 配置 :: 应用程序时区 , 美国/芝加哥 (英文):
2
3 配置 ([ 应用程序时区 => 美国/芝加哥 ]);

为了协助静态分析, Config Facade 还提供了类型化的配置检索方法。如果检索到的配置值与预期的类型不匹配,则会抛出异常:

1 配置 :: 细绳 配置键 (英文):
2 配置 :: 整数 配置键 (英文):
3 配置 :: 漂浮 配置键 (英文):
4 配置 :: 布尔值 配置键 (英文):
5 配置 :: 大批 配置键 (英文):

配置缓存

为了提高应用程序的速度,你应该使用 config:cache Artisan 命令。这会将应用程序的所有配置选项组合成一个文件,以便框架快速加载。

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

一旦配置被缓存,你的应用程序的 .env 在请求或 Artisan 命令期间,框架不会加载该文件;因此, env 函数将只返回外部的、系统级的环境变量。

因此,你应该确保只调用 env 在应用程序的配置中运行( config ) 文件。通过检查 Laravel 的默认配置文件,您可以看到许多此类示例。可以使用 config 功能 如上所述

config:clear 命令可用于清除缓存的配置:

1 php 工匠 配置:清除

如果你执行 config:cache 在部署过程中,你应该确保只调用 env 配置文件中的功能。配置缓存后, .env 文件将不会被加载;因此, env 函数将只返回外部的、系统级的环境变量。

配置发布

Laravel 的大部分配置文件已发布在你的应用程序的 config 目录;但是某些配置文件,例如 cors.phpview.php 默认情况下不会发布,因为大多数应用程序永远不需要修改它们。

不过,您可以使用 config:publish Artisan 命令发布任何默认未发布的配置文件:

1 php 工匠 配置:发布
2
3 php 工匠 配置:发布 - 全部

调试模式

debug 选项 config/app.php 配置文件决定了实际向用户显示多少有关错误的信息。默认情况下,此选项设置为尊重 APP_DEBUG 环境变量,存储在您的 .env 文件。

对于本地开发,您应该设置 APP_DEBUG 环境变量 true在您的生产环境中,此值应始终为 false . 如果变量设置为 true 在生产中,您可能会面临向应用程序的最终用户暴露敏感配置值的风险。

维护模式

当您的应用程序处于维护模式时,将针对应用程序的所有请求显示自定义视图。这样,在应用程序更新或执行维护时,可以轻松“禁用”应用程序。维护模式检查包含在应用程序的默认中间件堆栈中。如果应用程序处于维护模式,则 Symfony\Component\HttpKernel\Exception\HttpException 实例将抛出状态代码 503。

要启用维护模式,请执行 down Artisan 命令:

1 php 工匠 向下

如果你想要 Refresh 与所有维护模式响应一起发送的 HTTP 标头,您可以提供 refresh 调用时选项 down 命令。 Refresh 标头将指示浏览器在指定的秒数后自动刷新页面:

1 php 工匠 向下 --刷新=15

您还可以提供 retry 的选项 down 命令,它将被设置为 Retry-After HTTP 标头的值,尽管浏览器通常会忽略此标头:

1 php 工匠 向下 --重试=60

绕过维护模式

要使用秘密令牌绕过维护模式,您可以使用 secret 指定维护模式绕过令牌的选项:

1 php 工匠 向下 --秘密= 1630542a-246b-4b66-afa1-dd72a4c43515

将应用程序置于维护模式后,你可以导航到与此令牌匹配的应用程序 URL,Laravel 将向你的浏览器发出维护模式绕过 cookie:

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

如果你希望 Laravel 为你生成秘密令牌,你可以使用 with-secret 选项。一旦应用程序处于维护模式,秘密将显示给您:

1 php 工匠 向下 --with-secret

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

维护模式密钥通常应由字母数字字符和(可选)破折号组成。您应避免在 URL 中使用具有特殊含义的字符,例如 ? 或者 &

多台服务器上的维护模式

默认情况下,Laravel 使用基于文件的系统来确定您的应用程序是否处于维护模式。这意味着要激活维护模式, php artisan down 必须在托管应用程序的每台服务器上执行命令。

另外,Laravel 提供了一种基于缓存的方法来处理维护模式。此方法需要运行 php artisan down 命令。要使用此方法,请修改应用程序的维护模式变量 .env 文件。您应该选择一个缓存 store 所有服务器均可访问。这可确保维护模式状态在每台服务器上保持一致:

1 APP_MAINTENANCE_DRIVER =缓存
2 应用程序维护商店 =数据库

预渲染维护模式视图

如果你利用 php artisan down 命令,如果您的用户在 Composer 依赖项或其他基础架构组件更新时访问应用程序,他们仍可能偶尔遇到错误。发生这种情况的原因是 Laravel 框架的很大一部分必须启动才能确定您的应用程序处于维护模式并使用模板引擎呈现维护模式视图。

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

1 php 工匠 向下 --渲染= 错误::503

重定向维护模式请求

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

1 php 工匠 向下 --重定向=/

禁用维护模式

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

1 php 工匠 向上

您可以通过在以下位置定义自己的模板来自定义默认维护模式模板: resources/views/errors/503.blade.php

维护模式和队列

当您的应用程序处于维护模式时, 排队作业 将被处理。一旦应用程序退出维护模式,作业将继续照常处理。

维护模式的替代方案

由于维护模式要求你的应用程序停机几秒钟,因此请考虑以下替代方案 Laravel Vapor发送 使用 Laravel 实现零停机部署。