Laravel 配置
简介
Laravel框架的所有配置文件都存储在config目录中。 每个选项都有文档记录,因此可以随时浏览文件并熟悉可用的配置项。
环境配置
根据运行应用程序的环境使用不同的配置值通常会很有帮助。例如,我们可能希望在本地使用与在生产服务器上不同的缓存驱动程序。
为了达到这个目的,Laravel利用了Vance Lucas的DotEnv PHP库。在新安装的Laravel项目中,我们的应用程序的根目录将包含 .env.example 文件。如果是通过 Composer安装Laravel,此文件将自动复制到 .env。否则,我们应该手动将 .env.example 复制到 .env 中。
我们的.env文件不应提交给应用程序的源代码管理,因为使用该应用程序的每个开发人员/服务器都可能需要不同的环境配置。此外,如果入侵者获得对我们的源代码控制数据库的访问权限,这将带来安全隐患,因为任何敏感的凭据都将被泄漏。
如果与团队一起开发,则可能希望继续在应用程序中包含.env.example文件。通过将占位符值放在示例配置文件中,团队中的其他开发人员可以清楚地看到运行您的应用程序所需的环境变量。您也可以创建一个.env.testing文件。运行PHPUnit测试或使用--env=testing
选项执行Artisan
命令时,此文件将覆盖.env文件。
注意: .env文件中的任何变量都可以被外部环境变量(例如服务器级或系统级环境变量)覆盖
环境变量类型
.env文件中的所有变量都被解析为字符串,因此Laravel创建了一些保留值,以使我们可以从 env()
函数返回更广泛的类型:
.env Value |
env() Value |
---|---|
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 文件中列出的所有配置项将被加载到$_ENV 这个 PHP超全局变量中。 我们可以使用 env() 函数从配置文件中的这些变量中检索值。 实际上,如果我们查看Laravel配置文件,就会注意到已经使用此帮助程序的几个选项:
'debug' => env('APP_DEBUG', false),
传递给env函数的第二个值是“默认值”。 如果给定键不存在任何环境变量,将使用此值。
检测 环境变量 是否存在
当前的应用程序环境是通过我们的.env文件中的APP_ENV变量确定的。 我们可以通过使用App Facade中的environment
方法访问此值:
$environment = App::environment();
我们也可以将参数传递给environment()
方法,来检查.env文件中是否指定了该选项的值。 如果匹配到,则该方法将返回true:
if (App::environment('local')) {
// The environment is local
}
if (App::environment(['local', 'staging'])) {
// The environment is either local OR staging...
}
提示:服务器级别的APP_ENV环境变量可以覆盖当前的应用程序环境检测。 当我们需要为不同的环境配置共享同一应用程序时,这就很有用。因此我们可以设置一个给定的主机以匹配服务器配置中的给定环境。
在调试页面隐藏环境变量
当未捕获到异常且APP_DEBUG环境变量为true时,调试页将显示所有环境变量及其内容。 在某些情况下,我们可能希望隐藏某些变量。 可以通过更新config/app.php
配置文件中的debug_hide
选项来执行此操作。
在环境变量和服务器/请求数据中都可以使用某些变量。 因此,我们可能需要为$ _ENV和$ _SERVER隐藏它们:
return [
// ...
'debug_hide' => [
'_ENV' => [
'APP_KEY',
'DB_PASSWORD',
],
'_SERVER' => [
'APP_KEY',
'DB_PASSWORD',
],
'_POST' => [
'password',
],
],
];
访问 配置项
我们可以从应用程序中的任何位置使用全局配置帮助器功能轻松访问我们的配置值。 可以使用“点”语法访问配置值,该语法包括文件名和我们希望访问的选项。 如果配置选项不存在,也可以指定默认值,并将返回默认值:
$value = config('app.timezone');
// 如果要检索的配置项不存在,则返回默认值
$value = config('app.timezone', 'Asia/Seoul');
要想在运行过程中设置一个配置项,可以传给config()
函数一个数组
config(['app.timezone' => 'America/Chicago']);
缓存配置项
为了提高应用程序的速度,我们应该使用Artisan命令config:cache
将所有配置文件缓存到一个文件中。 这会将我们的应用程序的所有配置选项组合到一个文件中,该文件将由框架快速加载。
$ php artisan config:cache
通常,应在生产部署例程中运行这个命令。 该命令不应在本地开发期间运行,因为在应用程序开发过程中经常需要更改配置选项。
警告: 如果在部署过程中使用
config:cache
命令,那么我们必须要保证只是在 配置文件中使用env()
函数。因为一旦config:cache
命令执行了,那.env
文件将不会再被加载,这时所有的env()
函数都将返回null
。
维护模式
当我们的应用程序处于维护模式时,将向应用程序显示所有请求的自定义视图。 这使得在更新或执行维护时轻松“禁用”我们的应用程序。 应用程序的默认中间件堆栈中包括维护模式检查。 如果应用程序处于维护模式,则将抛出MaintenanceModeException,状态码为503。
使用下面的命令开启维护模式
$ php artisan down
我们还可以向down命令提供message
和retry
选项。 message 的值可用于显示或记录自定义消息,而 retry 的值将设置为HTTP 头 “ Retry-After” 的值:
$ php artisan down --message="Upgrading Database" --retry=60
即使在维护模式下,也可以使用命令的 allow
选项允许特定的IP地址或网络访问应用程序
$ php artisan down --allow=127.0.0.1 --allow=192.168.0.0/16
使用下面的命令,关闭维护模式
$ php artisan up
维护模式 & 队列
当我们的应用程序处于维护模式时,将不会处理任何排队的作业。 一旦应用程序退出维护模式,这些作业将继续按常规处理。
维护模式的替代方式
由于维护模式要求我们的应用程序有几秒钟的停止时间,因此请考虑使用Envoyer
之类的替代方案来使用Laravel完成零停止时间的部署。