配置信息
配置
介绍
Laravel 框架的所有配置文件都存放在 config 目录下,每个配置项都有文档,你可以整体阅读下所有这些配置文件来熟悉配置项的作用和位置。
这些配置文件允许你配置数据连接信息、邮箱服务器信息、以及很多其他核心配置信息,比如应用时区、加密密钥等。
环境配置
基于应用运行的环境不同设置不同的配置值能够给我们开发带来极大的方便,比如,我们通常在本地和线上环境配置不同的缓存驱动,这一功能在 Laravel 中很容易实现。
Laravel 使用 PHP 扩展库 DotEnv 来实现这一功能,在新安装的 Laravel 中,根目录下有一个 .env.example
文件,如果 Laravel 是通过 Composer
安装的,那么该文件已经被重命名为 .env
,否则的话你要自己手动重命名该文件。
Laravel的默认.env
文件包含一些常用的配置值,这些配置值可能会根据您的应用程序是在本地运行还是在生产Web服务器上运行而有所不同。 在 Laravel
的config
目录下,各种配置使用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 Vapor 和 Envoyer 等替代方案来实现Laravel 零停机部署。