在 Laravel 框架中,所有配置文件都存储在 “config” 目录中。每个配置选项都有详细的文档说明,因此可以随时浏览这些文件,以熟悉可用的配置选项。这些配置文件允许定义核心配置值,如数据库连接信息、邮件服务器信息、应用时区和加密密钥等。
一、使用About命令
Laravel 提供了一个 “about” Artisan 命令,可以快速显示应用配置、驱动程序和环境的概况:
php artisan about
如果只对输出的特定部分感兴趣,可以使用 “–only” 选项来过滤该部分。例如,若只想查看环境信息:
php artisan about --only=environment
此外若要详细探索特定配置文件的值,可以使用 “config:show” Artisan 命令:
php artisan config:show database
二、Laravel环境配置
根据应用程序运行的环境,使用不同的配置值通常非常有用。例如,在本地和生产服务器上,可能希望使用不同的缓存驱动程序。为此,Laravel 采用了 DotEnv PHP 库进行环境管理。在新安装的 Laravel 应用中,会发现根目录包含一个 ” .env.example” 文件,该文件定义了一些常见的环境变量。在安装过程中,此文件会自动复制为 “.env”。
Laravel 的默认 “.env” 文件包含了一些常见的配置值,这些值会根据应用程序是运行在本地环境还是生产 Web 服务器上而发生变化。这些配置值由 “config” 目录中的配置文件利用 Laravel 的 “env” 函数读取。
如果与团队协同开发,建议继续更新 “.env.example” 文件。通过在示例配置文件中使用占位符值,团队成员可以清楚地了解运行应用程序所需的环境变量。
注意: “.env” 文件中的变量可以被外部环境变量(如服务器级或系统级环境变量)覆盖。
1、环境文件的安全
在开发过程中, “.env” 文件不应提交到源代码控制中,因为每个开发者或服务器可能需要不同的环境配置。如果攻击者有机会访问源代码库,敏感凭据可能会被泄露,造成安全风险。不过,Laravel 允许加密环境文件,以便可以安全地将其添加到源代码控制中。
2、额外的环境文件
在加载应用程序的环境变量之前,Laravel 会检查当前是否已经设置了 “APP_ENV” 环境变量,或者是否在命令行中指定了 “–env” 参数。如果存在,Laravel 会尝试加载对应的 “.env.[APP_ENV]” 文件;如果不存在,则加载默认的 “.env” 文件。
3、环境变量类型
在 “.env” 文件中的所有变量通常会被解析为字符串。为了解决这个问题,Laravel 中定义了一些保留值,以便 “env()” 函数可以返回更广泛的类型范围:
如果需要定义一个包含空格的环境变量值,可以使用双引号括起来:
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')) { // 环境是本地 } if (App::environment(['local', 'staging'])) { // 环境是本地或 staging }
通过以上概述,将能够掌握 Laravel 应用程序的配置与环境管理方式,从而更好地适应不同的开发场景。
五、Laravel环境文件加密与配置管理
未加密的环境文件不应存储在源代码控制中,因为它们可能包含敏感信息。Laravel 提供了加密功能,使可以安全地存储环境文件并将其添加到源代码控制中。
1、环境文件的加密
要加密环境文件,请使用 “env:encrypt” Artisan 命令:
php artisan env:encrypt
执行该命令后,Laravel 将加密 “.env” 文件,并将加密后的内容保存在 “.env.encrypted” 文件中。加密密钥会在命令输出中显示,务必将其存储在安全的密码管理器中。如果希望使用自定义加密密钥,可以在命令中通过 “–key” 选项提供:
php artisan env:encrypt --key=3UVsEgGVK36XN82KKeyLFMhvosbZN1aF
如果应用程序有多个环境文件(例如 “.env” 和 “.env.staging”),可以使用 “–env” 选项指定要加密的环境文件:
php artisan env:encrypt --env=staging
2、环境文件的解密
要解密环境文件,请使用 “env:decrypt” Artisan 命令。此命令需要提供解密密钥,Laravel 默认从环境变量 “LARAVEL_ENV_ENCRYPTION_KEY” 中获取此密钥:
php artisan env:decrypt
或者也可以通过 “–key” 选项直接提供解密密钥:
php artisan env:decrypt --key=3UVsEgGVK36XN82KKeyLFMhvosbZN1aF
调用 “env:decrypt” 命令后,Laravel 将解密 “.env.encrypted” 文件,并将解密后的内容写入 “.env” 文件中。
同时该命令还支持自定义加密算法,通过 “–cipher” 选项指定:
php artisan env:decrypt --key=qUWuNRdfuImXcKxZ --cipher=AES-128-CBC
如果应用程序有多个环境文件,可以通过 “–env” 选项指定特定的环境文件:
php artisan env:decrypt --env=staging
为了覆盖现有的环境文件,可以在命令中添加 “–force” 选项:
php artisan env:decrypt --force
六、访问配置值
在 Laravel 中,可以通过 “Config” facade 或全局的 “config” 函数轻松访问配置值。采用“点”语法可访问配置项,指定文件名及所需选项的名称,还可以提供默认值:
use Illuminate\Support\Facades\Config; $value = Config::get('app.timezone'); $value = config('app.timezone'); // 如果配置值不存在,检索默认值 $value = config('app.timezone', 'Asia/Seoul');
要在运行时修改配置值,可以调用 “Config” facade 的 “set” 方法,或传递数组给 “config” 函数:
Config::set('app.timezone', 'America/Chicago'); config(['app.timezone' => 'America/Chicago']);
为了支持静态分析,”Config” facade 还提供了类型转换的配置检索方法。当检索到的配置值类型不匹配时,将抛出异常:
Config::string('config-key'); Config::integer('config-key'); Config::float('config-key'); Config::boolean('config-key'); Config::array('config-key');
七、配置缓存
为了提高应用程序性能,建议使用 “config:cache” Artisan 命令将所有配置文件缓存到一个文件中,这样框架可以快速加载配置。
php artisan config:cache
应该将此命令作为生产部署过程的一部分,但在本地开发期间不应执行,因为开发过程中配置选项可能会频繁改变。
一旦配置被缓存,应用程序的 “.env” 文件在请求或 Artisan 命令期间将不会被加载,因此 “env” 函数将只返回外部的系统级环境变量。确保仅从应用程序的配置文件中调用 “env” 函数,以避免不必要的错误。
要清除缓存的配置,可以使用以下命令:
php artisan config:clear
八、配置发布
Laravel 的大多数配置文件已经发布在您的应用程序的 config 目录中;然而,某些配置文件如 cors.php 和 view.php 默认不会被发布,因为大多数应用程序永远不需要修改它们。
可以使用 config:publish Artisan 命令来发布默认未发布的任何配置文件:
php artisan config:publish php artisan config:publish --all