配置
介绍
Laravel 框架的所有配置文件都存储在 config
目录中。每个选项都有文档说明,因此请随意浏览这些文件并熟悉可用的选项。
环境配置
根据应用程序运行的环境使用不同的配置值通常是有帮助的。例如,您可能希望在本地使用不同的缓存驱动,而不是在生产服务器上。
为了简化这一过程,Laravel 使用了 Vance Lucas 的 DotEnv PHP 库。在全新的 Laravel 安装中,应用程序的根目录将包含一个 .env.example
文件。如果您通过 Composer 安装 Laravel,该文件将自动重命名为 .env
。否则,您应手动重命名该文件。
您的 .env
文件不应提交到应用程序的源代码控制中,因为每个使用您的应用程序的开发人员/服务器可能需要不同的环境配置。此外,如果入侵者获得了对您的源代码控制库的访问权限,这将是一个安全风险,因为任何敏感凭据都会被暴露。
如果您与团队一起开发,您可能希望继续在应用程序中包含一个 .env.example
文件。通过在示例配置文件中放置占位符值,您团队中的其他开发人员可以清楚地看到运行应用程序所需的环境变量。您还可以创建一个 .env.testing
文件。在运行 PHPUnit 测试或使用 --env=testing
选项执行 Artisan 命令时,该文件将覆盖 .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="My Application"
检索环境配置
当您的应用程序接收到请求时,文件中列出的所有变量将被加载到 $_ENV
PHP 超全局变量中。但是,您可以使用 env
辅助函数在配置文件中检索这些变量的值。事实上,如果您查看 Laravel 配置文件,您会注意到几个选项已经在使用这个辅助函数:
'debug' => env('APP_DEBUG', false),
传递给 env
函数的第二个值是“默认值”。如果给定键没有环境变量存在,则将使用此值。
确定当前环境
当前应用程序环境是通过 .env
文件中的 APP_ENV
变量确定的。您可以通过 App
facade 上的 environment
方法访问此值:
$environment = App::environment();
您还可以向 environment
方法传递参数,以检查环境是否与给定值匹配。如果环境与任何给定值匹配,该方法将返回 true
:
if (App::environment('local')) {
// 环境是本地的
}
if (App::environment(['local', 'staging'])) {
// 环境是本地或暂存...
}
当前应用程序环境检测可以通过服务器级 APP_ENV
环境变量覆盖。当您需要为不同的环境配置共享相同的应用程序时,这可能很有用,因此您可以在服务器的配置中设置给定主机以匹配给定环境。
从调试页面隐藏环境变量
当异常未被捕获且 APP_DEBUG
环境变量为 true
时,调试页面将显示所有环境变量及其内容。在某些情况下,您可能希望隐藏某些变量。您可以通过更新 config/app.php
配置文件中的 debug_blacklist
选项来实现这一点。
某些变量在环境变量和服务器/请求数据中都可用。因此,您可能需要同时将它们列入 $_ENV
和 $_SERVER
的黑名单:
return [
// ...
'debug_blacklist' => [
'_ENV' => [
'APP_KEY',
'DB_PASSWORD',
],
'_SERVER' => [
'APP_KEY',
'DB_PASSWORD',
],
'_POST' => [
'password',
],
],
];
访问配置值
您可以使用全局 config
辅助函数从应用程序的任何地方轻松访问配置值。可以使用“点”语法访问配置值,其中包括您希望访问的文件和选项的名称。还可以指定默认值,如果配置选项不存在,将返回该默认值:
$value = config('app.timezone');
要在运行时设置配置值,请将数组传递给 config
辅助函数:
config(['app.timezone' => 'America/Chicago']);
配置缓存
为了提高应用程序的速度,您应该使用 config:cache
Artisan 命令将所有配置文件缓存到一个文件中。这将把应用程序的所有配置选项组合到一个文件中,框架可以快速加载该文件。
您通常应该在生产部署过程中运行 php artisan config:cache
命令。该命令不应在本地开发期间运行,因为在应用程序开发过程中,配置选项需要频繁更改。
如果您在部署过程中执行 config:cache
命令,您应该确保仅在配置文件中调用 env
函数。一旦配置被缓存,.env
文件将不会被加载,所有对 env
函数的调用将返回 null
。
维护模式
当您的应用程序处于维护模式时,将为应用程序的所有请求显示自定义视图。这使得在更新或执行维护时“禁用”应用程序变得容易。维护模式检查包含在应用程序的默认中间件堆栈中。如果应用程序处于维护模式,将抛出一个 MaintenanceModeException
,状态码为 503。
要启用维护模式,请执行 down
Artisan 命令:
php artisan down
您还可以为 down
命令提供 message
和 retry
选项。message
值可用于显示或记录自定义消息,而 retry
值将被设置为 Retry-After
HTTP 头的值:
php artisan down --message="Upgrading Database" --retry=60
即使在维护模式下,也可以使用命令的 allow
选项允许特定 IP 地址或网络访问应用程序:
php artisan down --allow=127.0.0.1 --allow=192.168.0.0/16
要禁用维护模式,请使用 up
命令:
php artisan up
您可以通过在 resources/views/errors/503.blade.php
中定义自己的模板来自定义默认的维护模式模板。
维护模式与队列
当您的应用程序处于维护模式时,不会处理任何队列任务。一旦应用程序退出维护模式,任务将继续正常处理。
维护模式的替代方案
由于维护模式需要您的应用程序有几秒钟的停机时间,请考虑使用 Envoyer 等替代方案来实现 Laravel 的零停机时间部署。