Skip to content

配置

介绍

所有 Laravel 框架的配置文件都存储在 app/config 目录中。每个文件中的每个选项都有文档说明,因此请随意浏览这些文件,熟悉可用的选项。

有时您可能需要在运行时访问配置值。您可以使用 Config 类来实现:

访问配置值

php
Config::get('app.timezone');

您还可以指定一个默认值,如果配置选项不存在,则返回该值:

php
$timezone = Config::get('app.timezone', 'UTC');

设置配置值

请注意,可以使用“点”样式语法访问各种文件中的值。您还可以在运行时设置配置值:

php
Config::set('database.default', 'sqlite');

在运行时设置的配置值仅在当前请求中有效,不会在后续请求中保留。

环境配置

根据应用程序运行的环境,拥有不同的配置值通常是有帮助的。例如,您可能希望在本地开发机器上使用不同的缓存驱动程序,而不是在生产服务器上。使用基于环境的配置可以轻松实现这一点。

只需在 config 目录中创建一个与您的环境名称匹配的文件夹,例如 local。接下来,创建您希望覆盖的配置文件,并为该环境指定选项。例如,要覆盖本地环境的缓存驱动程序,您可以在 app/config/local 中创建一个 cache.php 文件,内容如下:

php
<?php

return array(

	'driver' => 'file',

);
lightbulb

不要使用 'testing' 作为环境名称。这是保留给单元测试的。

请注意,您不必指定基础配置文件中的 每个 选项,而只需指定您希望覆盖的选项。环境配置文件将“级联”到基础文件之上。

接下来,我们需要指示框架如何确定它正在运行的环境。默认环境始终是 production。但是,您可以在安装根目录的 bootstrap/start.php 文件中设置其他环境。在此文件中,您将找到一个 $app->detectEnvironment 调用。传递给此方法的数组用于确定当前环境。您可以根据需要向数组中添加其他环境和机器名称。

php
<?php

$env = $app->detectEnvironment(array(

    'local' => array('your-machine-name'),

));

在此示例中,'local' 是环境的名称,而 'your-machine-name' 是服务器的主机名。在 Linux 和 Mac 上,您可以使用 hostname 终端命令来确定您的主机名。

如果您需要更灵活的环境检测,您可以将 Closure 传递给 detectEnvironment 方法,从而允许您以任何您希望的方式实现环境检测:

php
$env = $app->detectEnvironment(function()
{
	return $_SERVER['MY_LARAVEL_ENV'];
});

访问当前应用程序环境

您可以通过 environment 方法访问当前应用程序环境:

php
$environment = App::environment();

您还可以向 environment 方法传递参数,以检查环境是否与给定值匹配:

php
if (App::environment('local'))
{
	// 环境是本地
}

if (App::environment('local', 'staging'))
{
	// 环境是本地或暂存...
}

提供者配置

使用环境配置时,您可能希望将环境 服务提供者 “附加”到您的主要 app 配置文件中。但是,如果您尝试这样做,您会注意到环境 app 提供者会覆盖您主要 app 配置文件中的提供者。要强制提供者附加,请在您的环境 app 配置文件中使用 append_config 辅助方法:

php
'providers' => append_config(array(
	'LocalOnlyServiceProvider',
))

保护敏感配置

对于“真实”应用程序,建议将所有敏感配置保留在配置文件之外。诸如数据库密码、Stripe API 密钥和加密密钥等内容应尽可能保留在配置文件之外。那么,我们应该将它们放在哪里呢?幸运的是,Laravel 提供了一种非常简单的解决方案来保护这些类型的配置项,使用“点”文件。

首先, 配置您的应用程序 以识别您的机器处于 local 环境。接下来,在项目根目录中创建一个 .env.local.php 文件,该文件通常与包含 composer.json 文件的目录相同。.env.local.php 应返回一个键值对数组,类似于典型的 Laravel 配置文件:

php
<?php

return array(

	'TEST_STRIPE_KEY' => 'super-secret-sauce',

);

此文件返回的所有键值对将自动通过 $_ENV$_SERVER PHP “超级全局”可用。您现在可以在配置文件中引用这些全局变量:

php
'key' => $_ENV['TEST_STRIPE_KEY']

确保将 .env.local.php 文件添加到您的 .gitignore 文件中。这将允许您团队中的其他开发人员创建自己的本地环境配置,并将您的敏感配置项隐藏在源控制之外。

现在,在您的生产服务器上,在项目根目录中创建一个 .env.php 文件,其中包含生产环境的相应值。与 .env.local.php 文件一样,生产 .env.php 文件永远不应包含在源控制中。

lightbulb

您可以为应用程序支持的每个环境创建一个文件。例如,development 环境将加载 .env.development.php 文件(如果存在)。但是,生产环境始终使用 .env.php 文件。

维护模式

当您的应用程序处于维护模式时,所有路由的自定义视图将显示给用户。这使得在更新或进行维护时“禁用”应用程序变得简单。App::down 方法的调用已在您的 app/start/global.php 文件中存在。当您的应用程序处于维护模式时,此方法的响应将发送给用户。

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

php
php artisan down

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

php
php artisan up

要在应用程序处于维护模式时显示自定义视图,您可以在应用程序的 app/start/global.php 文件中添加如下内容:

php
App::down(function()
{
	return Response::view('maintenance', array(), 503);
});

如果传递给 down 方法的 Closure 返回 NULL,则该请求将忽略维护模式。

维护模式与队列

当您的应用程序处于维护模式时,不会处理任何 队列作业。一旦应用程序退出维护模式,作业将继续正常处理。