Laravel 框架的所有配置文件都存储在 config 目录中。每个选项都有详细说明,因此请随意查看这些文件并熟悉可用的选项。
这些配置文件允许您配置诸如数据库连接信息、邮件服务器信息等内容,以及应用程序 URL 和加密密钥等各种其他核心配置值。
about 命令Laravel 可以通过 about Artisan 命令显示应用程序的配置、驱动程序和环境概述。
php artisan about如果您只对应用程序概览输出的某个特定部分感兴趣,您可以使用 --only 选项过滤该部分:
php artisan about --only=environment或者,要详细查看特定配置文件中的值,您可以使用 config:show Artisan 命令:
php artisan config:show database通常,根据应用程序运行的环境设置不同的配置值会很有帮助。例如,您可能希望在本地使用与生产服务器上不同的缓存驱动。
为了让这一切变得轻而易举,Laravel 使用了 DotEnv PHP 库。在全新的 Laravel 安装中,你的应用的根目录将包含一个 .env.example 文件,该文件定义了许多常见的环境变量。在 Laravel 安装过程中,此文件将自动复制到 .env。
Laravel 的默认 .env 文件包含一些常见的配置值,这些值可能因您的应用程序是在本地运行还是在生产 Web 服务器上运行而有所不同。这些值随后会被 config 目录中的配置文件使用 Laravel 的 env 函数读取。
如果你正在与团队协作开发,你可能希望继续在你的应用中包含并更新 .env.example 文件。通过在示例配置文件中放置占位符值,你的团队中的其他开发人员可以清楚地看到运行你的应用需要哪些环境变量。
[!NOTE]
您的.env文件中的任何变量都可以被外部环境变量覆盖,例如服务器级别或系统级别的环境变量。
您的 .env 文件不应提交到您的应用程序的源代码管理中,因为使用您的应用程序的每个开发者/服务器可能需要不同的环境配置。此外,这会是一个安全风险,以防入侵者获取您的源代码仓库的访问权限,因为任何敏感凭据都将暴露。
然而,可以使用 Laravel 内置的环境文件加密来加密您的环境文件。 加密后的环境文件可以安全地放入源代码管理中。
在加载你的应用程序的环境变量之前, Laravel 会确定 APP_ENV 环境变量是否已在外部提供或 --env CLI 参数是否已指定. 如果是这样, Laravel 将尝试加载 .env.[APP_ENV] 文件如果它存在. 如果它不存在, 默认的 .env 文件将被加载.
你的 .env 文件中的所有变量通常被解析为字符串,所以一些保留值已被创建,以允许你从 env() 函数返回更广泛的类型:
如果您需要定义一个值包含空格的环境变量,可以通过将该值用双引号括起来实现:
APP_NAME="My Application"所有列在 .env 文件中的变量将加载到 $_ENV PHP 超全局变量中,当你的应用程序收到请求时。然而,你可以使用 env 函数在你的配置文件中从这些变量中检索值。事实上,如果你查看 Laravel 配置文件,你会注意到许多选项已经在使用这个函数:
'debug' => (bool) env('APP_DEBUG', false),传递给 env 函数的第二个值是 "默认值". 如果给定键不存在任何环境变量 则将返回此值.
当前应用程序环境由您的 .env 文件中的 APP_ENV 变量确定。您可以通过 App 门面上的 environment 方法访问此值:
use Illuminate\Support\Facades\App;
$environment = App::environment();你还可以给 environment 方法传递参数,来确定环境是否匹配给定的值。如果环境匹配任何给定的值,该方法将返回 true:
if (App::environment('local')) {
// The environment is local
}
if (App::environment(['local', 'staging'])) {
// The environment is either local OR staging...
}[!NOTE]
当前的应用程序环境检测可以通过定义一个服务器级别的APP_ENV环境变量来覆盖。
未加密的环境文件绝不应存储在源代码管理中。然而,Laravel 允许你加密你的环境文件,以便它们可以与应用程序的其余部分一起安全地添加到源代码管理中。
要加密环境文件,您可以使用 env:encrypt 命令:
php artisan env:encrypt运行 env:encrypt 命令将加密您的 .env 文件并将加密内容放入 .env.encrypted 文件中。解密密钥将在命令的输出中显示,并应存储在安全的密码管理器中。如果您想提供自己的加密密钥,可以使用 --key 选项来调用此命令:
php artisan env:encrypt --key=3UVsEgGVK36XN82KKeyLFMhvosbZN1aF[!NOTE]
提供的密钥长度应与所用加密算法要求的密钥长度匹配。默认情况下,Laravel 将使用AES-256-CBC算法,该算法需要一个 32 字符的密钥。你可以自由使用 Laravel 的 加密器 支持的任何算法,通过在调用命令时传递--cipher选项。
如果你的应用有多个环境文件,例如 .env 和 .env.staging,你可以通过 --env 选项提供环境名称来指定需要加密的环境文件:
php artisan env:encrypt --env=staging要解密环境文件,你可以使用 env:decrypt 命令。此命令需要一个解密密钥,Laravel 将从 LARAVEL_ENV_ENCRYPTION_KEY 环境变量中检索:
php artisan env:decryptOr, the key may be provided directly to the command via the --key option:
php artisan env:decrypt --key=3UVsEgGVK36XN82KKeyLFMhvosbZN1aF当 env:decrypt 命令被调用时,Laravel 将会解密 .env.encrypted 文件的内容,并将解密后的内容放入 .env 文件。
为了使用自定义加密算法,可以将 --cipher 选项提供给 env:decrypt 命令:
php artisan env:decrypt --key=qUWuNRdfuImXcKxZ --cipher=AES-128-CBC如果您的应用程序有多个环境文件, 例如 .env 和 .env.staging, 您可以通过 --env 选项提供环境名称来指定应该被解密的环境文件:
php artisan env:decrypt --env=staging为了覆盖现有环境文件,您可以将 --force 选项提供给 env:decrypt 命令:
php artisan env:decrypt --force您可以从应用程序的任何位置轻松访问您的配置值,方法是使用 Config 外观或全局 config 函数。配置值可以使用“点”语法访问,该语法包括您希望访问的文件和选项的名称。还可以指定一个默认值,如果配置选项不存在,该默认值将被返回:
use Illuminate\Support\Facades\Config;
$value = Config::get('app.timezone');
$value = config('app.timezone');
// Retrieve a default value if the configuration value does not exist...
$value = config('app.timezone', 'Asia/Seoul');在运行时设置配置值,您可以调用 Config 门面的 set 方法或将一个数组传递给 config 函数:
Config::set('app.timezone', 'America/Chicago');
config(['app.timezone' => 'America/Chicago']);为协助静态分析,Config 门面也提供了类型化配置检索方法。如果检索到的配置值与预期的类型不匹配,将抛出异常:
Config::string('config-key');
Config::integer('config-key');
Config::float('config-key');
Config::boolean('config-key');
Config::array('config-key');
Config::collection('config-key');为了提升你的应用程序的速度,你应该使用 config:cache Artisan 命令将所有配置文件缓存到一个文件中。这会将你应用程序的所有配置选项组合到一个文件中,该文件可以被框架快速加载。
你通常应该将 php artisan config:cache 命令作为生产部署过程的一部分来运行。 该命令不应该在本地开发期间运行,因为在你的应用程序开发过程中,配置选项将需要频繁更改。
一旦配置被缓存,你的应用程序的 .env 文件将不会在请求或 Artisan 命令期间被框架加载;因此,env 函数将只返回外部、系统级别的环境变量。
因此,您应该确保只在应用程序的配置 (config) 文件中调用 env 函数。您可以通过查看 Laravel 的默认配置文件来查看许多此类示例。配置值可以在应用程序的任何地方使用 如上所述 的 config 函数访问。
可使用 config:clear 命令清除缓存的配置:
php artisan config:clear[!WARNING]
如果您在部署过程中执行config:cache命令,您应该确保只从配置文件中调用env函数。一旦配置被缓存,.env文件将不会被加载;因此,env函数将只返回外部的、系统级别的环境变量。
Laravel 的大多数配置文件已发布在你的应用程序的 config 目录下;然而,某些配置文件例如 cors.php 和 view.php 默认不会发布,因为大多数应用程序永远不需要修改它们。
但是,您可以使用 config:publish Artisan 命令来发布任何默认未发布的配置文件:
php artisan config:publish
php artisan config:publish --allThe debug option in your config/app.php configuration file determines how much information about an error is actually displayed to the user. By default, this option is set to respect the value of the APP_DEBUG environment variable, which is stored in your .env file.
[!WARNING]
对于本地开发,你应该将APP_DEBUG环境变量设置为true。在你的生产环境中,此值应始终为false。如果该变量在生产环境中设置为true,你将面临向应用程序最终用户暴露敏感配置值的风险。
当您的应用程序处于维护模式时,将会为您的应用程序的所有请求显示一个自定义视图。这使得在您的应用程序更新或执行维护时,“禁用”您的应用程序变得容易。您的应用程序的默认中间件堆栈中包含一个维护模式检查。如果应用程序处于维护模式,将会抛出一个 Symfony\Component\HttpKernel\Exception\HttpException 实例,状态码为 503。
要启用维护模式,执行 down Artisan 命令:
php artisan down如果您希望该 Refresh HTTP 标头随所有维护模式响应一起发送,您可以在调用该 down 命令时提供该 refresh 选项。该 Refresh 标头将指示浏览器在指定秒数后自动刷新页面:
php artisan down --refresh=15您也可以为 down 命令提供一个 retry 选项,它将被设置为 Retry-After HTTP 头的值,尽管浏览器通常会忽略此头:
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如果您希望 Laravel 为您生成密令,您可以使用 with-secret 选项。一旦应用程序处于维护模式,该密令将显示给您:
php artisan down --with-secret当访问这个隐藏路由时,您将被重定向到应用程序的 / 路由。一旦 cookie 已发送到您的浏览器,您将能够正常浏览应用程序,就像它不在维护模式一样。
[!注意]
您的维护模式密钥通常应由字母数字字符以及(可选地)连字符组成。您应避免使用在 URL 中具有特殊含义的字符,例如?或&。
默认情况下,Laravel 使用基于文件的系统来判断你的应用程序是否处于维护模式。这意味着要激活维护模式,必须在托管你的应用程序的每台服务器上执行 php artisan down 命令。
或者,Laravel 提供了一种基于缓存的方法来处理维护模式。这种方法只需要在一台服务器上运行 php artisan down 命令。要使用这种方法,请修改应用程序 .env 文件中的维护模式变量。您应该选择一个所有服务器都可访问的缓存 store。这确保了维护模式状态在每台服务器上都保持一致:
APP_MAINTENANCE_DRIVER=cache
APP_MAINTENANCE_STORE=database如果您在部署期间使用 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 Cloud 这样完全托管的平台上运行你的应用程序以实现 Laravel 的零停机部署。