配置
介绍
所有 Laravel 框架的配置文件都存储在 app/config
目录中。每个文件中的每个选项都有文档说明,因此请随意浏览这些文件,熟悉可用的选项。
有时您可能需要在运行时访问配置值。您可以使用 Config
类来实现:
访问配置值
Config::get('app.timezone');
您还可以指定一个默认值,如果配置选项不存在,则返回该值:
$timezone = Config::get('app.timezone', 'UTC');
设置配置值
请注意,可以使用“点”样式语法访问各种文件中的值。您还可以在运行时设置配置值:
Config::set('database.default', 'sqlite');
在运行时设置的配置值仅在当前请求中有效,不会在后续请求中保留。
环境配置
根据应用程序运行的环境,拥有不同的配置值通常是有帮助的。例如,您可能希望在本地开发机器上使用不同的缓存驱动程序,而不是在生产服务器上。使用基于环境的配置可以轻松实现这一点。
只需在 config
目录中创建一个与您的环境名称匹配的文件夹,例如 local
。接下来,创建您希望覆盖的配置文件,并为该环境指定选项。例如,要覆盖本地环境的缓存驱动程序,您可以在 app/config/local
中创建一个 cache.php
文件,内容如下:
<?php
return array(
'driver' => 'file',
);
不要使用 'testing' 作为环境名称。这是保留给单元测试的。
请注意,您不必指定基础配置文件中的 每个 选项,而只需指定您希望覆盖的选项。环境配置文件将“级联”到基础文件之上。
接下来,我们需要指示框架如何确定它正在运行的环境。默认环境始终是 production
。但是,您可以在安装根目录的 bootstrap/start.php
文件中设置其他环境。在此文件中,您将找到一个 $app->detectEnvironment
调用。传递给此方法的数组用于确定当前环境。您可以根据需要向数组中添加其他环境和机器名称。
<?php
$env = $app->detectEnvironment(array(
'local' => array('your-machine-name'),
));
在此示例中,'local' 是环境的名称,而 'your-machine-name' 是服务器的主机名。在 Linux 和 Mac 上,您可以使用 hostname
终端命令来确定您的主机名。
如果您需要更灵活的环境检测,您可以将 Closure
传递给 detectEnvironment
方法,从而允许您以任何您希望的方式实现环境检测:
$env = $app->detectEnvironment(function()
{
return $_SERVER['MY_LARAVEL_ENV'];
});
访问当前应用程序环境
您可以通过 environment
方法访问当前应用程序环境:
$environment = App::environment();
您还可以向 environment
方法传递参数,以检查环境是否与给定值匹配:
if (App::environment('local'))
{
// 环境是本地
}
if (App::environment('local', 'staging'))
{
// 环境是本地或暂存...
}
提供者配置
使用环境配置时,您可能希望将环境 服务提供者 “附加”到您的主要 app
配置文件中。但是,如果您尝试这样做,您会注意到环境 app
提供者会覆盖您主要 app
配置文件中的提供者。要强制提供者附加,请在您的环境 app
配置文件中使用 append_config
辅助方法:
'providers' => append_config(array(
'LocalOnlyServiceProvider',
))
保护敏感配置
对于“真实”应用程序,建议将所有敏感配置保留在配置文件之外。诸如数据库密码、Stripe API 密钥和加密密钥等内容应尽可能保留在配置文件之外。那么,我们应该将它们放在哪里呢?幸运的是,Laravel 提供了一种非常简单的解决方案来保护这些类型的配置项,使用“点”文件。
首先, 配置您的应用程序 以识别您的机器处于 local
环境。接下来,在项目根目录中创建一个 .env.local.php
文件,该文件通常与包含 composer.json
文件的目录相同。.env.local.php
应返回一个键值对数组,类似于典型的 Laravel 配置文件:
<?php
return array(
'TEST_STRIPE_KEY' => 'super-secret-sauce',
);
此文件返回的所有键值对将自动通过 $_ENV
和 $_SERVER
PHP “超级全局”可用。您现在可以在配置文件中引用这些全局变量:
'key' => $_ENV['TEST_STRIPE_KEY']
确保将 .env.local.php
文件添加到您的 .gitignore
文件中。这将允许您团队中的其他开发人员创建自己的本地环境配置,并将您的敏感配置项隐藏在源控制之外。
现在,在您的生产服务器上,在项目根目录中创建一个 .env.php
文件,其中包含生产环境的相应值。与 .env.local.php
文件一样,生产 .env.php
文件永远不应包含在源控制中。
您可以为应用程序支持的每个环境创建一个文件。例如,development
环境将加载 .env.development.php
文件(如果存在)。但是,生产环境始终使用 .env.php
文件。
维护模式
当您的应用程序处于维护模式时,所有路由的自定义视图将显示给用户。这使得在更新或进行维护时“禁用”应用程序变得简单。App::down
方法的调用已在您的 app/start/global.php
文件中存在。当您的应用程序处于维护模式时,此方法的响应将发送给用户。
要启用维护模式,只需执行 down
Artisan 命令:
php artisan down
要禁用维护模式,请使用 up
命令:
php artisan up
要在应用程序处于维护模式时显示自定义视图,您可以在应用程序的 app/start/global.php
文件中添加如下内容:
App::down(function()
{
return Response::view('maintenance', array(), 503);
});
如果传递给 down
方法的 Closure 返回 NULL
,则该请求将忽略维护模式。
维护模式与队列
当您的应用程序处于维护模式时,不会处理任何 队列作业。一旦应用程序退出维护模式,作业将继续正常处理。