codemix / yii2-configloader
从配置文件和环境变量中构建配置数组。
Requires
- php: ^7.1.3 || ^8.0
- vlucas/phpdotenv: ^5.0
- yiisoft/yii2: *
Requires (Dev)
- phpunit/phpunit: >4.0 <8
This package is auto-updated.
Last update: 2024-09-05 20:10:38 UTC
README
从配置文件和环境变量中构建配置数组。
特性
您可以使用此扩展来解决以下任务中的某些或全部任务
- 为Web和命令行应用程序构建Yii2配置数组
- 从环境变量初始化Yii环境(
YII_DEBUG
,YII_ENV
) - 从
.env
文件加载环境变量 - 从环境变量获取配置选项
- 加载本地配置覆盖
- 简化配置初始化和Yii 2引导
安装
使用 composer 安装此包
composer require codemix/yii2-configloader
描述
我们主要使用此扩展来配置我们的Docker化yii2应用程序。在构建Docker应用程序时,只通过环境变量在产品模式中发生运行时配置是一种良好实践。
但在本地开发期间,我们可以稍微放宽这些严格的要求,因为我们有时必须添加调试选项或其他类似选项,这些选项不应包含在主要配置中。在这种情况下,扩展有助于使用位于版本控制之外的本地配置文件来覆盖设置。
您可以使用此扩展的几种方法
- 仅使用Yii环境初始化
- 仅使用配置加载器
- 两者都使用
我们首先展示如何使用前两种选项“独立”和然后第三种,包含所有功能的组合方式。
1. 初始化Yii环境
这将根据相应的环境变量设置YII_DEBUG
和YII_ENV
变量(如果设置了)。它还可以从.env
文件中加载它们。
在调试模式下,error_reporting()
还将设置为E_ALL
。
<?php use codemix\yii2confload\Config; Config::initEnv('/path/to/app'); $setting = Config::env('MY_SETTING', 'default');
如果您省略应用程序路径,则不会加载任何.env
文件。
2. 加载配置
如果您想使用此扩展加载配置,必须遵循以下命名方案
config/web.php
- Web配置config/console.php
- 命令行配置config/local.php
- Web配置的本地覆盖(可选)config/local-console.php
- 命令行配置的本地覆盖(可选)
如果您只想从文件加载配置,但不初始化如上所示的Yii环境,您将创建一个Config
实例,并将应用程序基本目录作为第二个参数传递给构造函数,第二个参数为false
<?php use codemix\yii2confload\Config; $config = new Config('/path/to/app', false); // Reads configuration from config/web.php $webConfig = $config->web();
2.1 本地配置
默认情况下,本地配置文件local.php
和local-console.php
不会加载。要激活此功能,您可以在服务器环境或.env
中设置ENABLE_LOCALCONF
环境变量
ENABLE_LOCALCONF=1
现在,方法将返回相应的合并结果
web()
:config/web.php
+config/local.php
console()
:config/console.php
+config/local-console.php
或者,您可以显式请求本地配置
<?php use codemix\yii2confload\Config; $config = new Config('/path/to/app', false); // Merges configuration from config/web.php and config/local.php if present $webConfig = $config->web([], true); // Merges configuration from config/console.php and config/local-console.php if present $consoleConfig = $config->console([], true);
2.2 合并自定义配置
在获取Web或控制台配置时,您还可以注入一些其他配置
<?php use codemix\yii2confload\Config; $config = new Config('/path/to/app', false); $webConfig = $config->web(['id' => 'test'], true);
3. 初始化Yii环境和加载配置
让我们最终展示一个完整示例,演示如何一次性使用所有提到的功能。典型的设置将使用以下文件
.env
在此处,我们定义了Yii环境和数据库凭证。你可以以相同的方式添加更多的配置选项
YII_DEBUG=1
YII_ENV=dev
DB_DSN=mysql:host=db.example.com;dbname=web
DB_USER=user
DB_PASSWORD='**secret**'
config/web.php
此文件稍后将在codemix\yii2confload\Config
的作用域内被包含,因此你可以轻松访问实例和类方法
<?php /* @var codemix\yii2confload\Config $this */ return [ 'components' => [ 'db' => [ 'dsn' => self::env('DB_DSN', 'mysql:host=db;dbname=web'), 'username' => self::env('DB_USER', 'web'), 'password' => self::env('DB_PASSWORD', 'web'), ],
config/console.php
访问配置实例允许你例如在控制台配置中重用你的网络配置的一部分。
<?php /* @var codemix\yii2confload\Config $this */ $web = $this->web(); return [ // ... 'components' => [ 'db' => $web['components']['db'],
web/index.php
我们已经简化了设置Config
对象并将Yii 2引导文件加载到单个方法Config::bootstrap()
中的过程,该方法只接收应用程序目录作为参数。
<?php use codemix\yii2confload\Config; require(__DIR__ . '/../vendor/autoload.php'); $config = Config::bootstrap(__DIR__ . '/..'); Yii::createObject('yii\web\Application', [$config->web()])->run();
这确保了事情按正确顺序加载。如果你更喜欢更详细版本,上面的代码相当于
<?php use codemix\yii2confload\Config; require(__DIR__ . '/../vendor/autoload.php'); $config = new Config(__DIR__ . '/..'); require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php'); Yii::createObject('yii\web\Application', [$config->web()])->run();
yii
对于控制台应用程序,使用了相同的方法。
<?php use codemix\yii2confload\Config; require(__DIR__ . '/vendor/autoload.php'); $config = Config::bootstrap(__DIR__); $application = Yii::createObject('yii\console\Application', [$config->console()]); exit($application->run());