配置 (manifest.php)
最后更新于:2022-04-02 07:04:58
## 环境配置
MixPHP 骨架代码中默认采用 [symfony/dotenv](https://packagist.org/packages/symfony/dotenv) 库完成环境配置处理,框架根目录的 `.env` 文件为环境配置文件,环境配置通常配置一些在不同环境中参数值不同的配置信息,如:数据库账号密码等。
>[success] 正确的使用方式:环境配置应该只在 manifest.php 文件中使用,而程序代码中只使用应用清单配置
可配置多个环境配置文件,如:`.env.dev` 、`.env.test` 、`.env.pro`,然后在入口文件中切换使用,以适应不同的环境,修改入口文件中 `$dotenv->load('***')` 方法传入的文件路径即可切换。
~~~php
$dotenv->load(__DIR__ . '/../.env');
~~~
>[info] .env 文件,需要 ls -a 才能在服务器上显示出来。
## 应用清单配置 (manifest.php)
MixPHP 的 App 类实例化时需要传入一些配置信息,配置信息是一个数组,这些信息就是应用清单配置,通常单独存放在一个文件中,这个文件就叫应用清单配置文件。
下面是 `bin/mix.php` 入口文件的部分源码,能看到配置信息是如何导入 App 类的:
~~~
// Run application
$app = new Mix\Console\Application(require __DIR__ . '/../manifest/manifest.php');
$app->run();
~~~
### 配置详情
一个典型的应用配置文件内容如下:
[>> 到 GitHub 查看 manifest.php <<](https://github.com/mix-php/mix-skeleton/tree/v2.1/manifest/manifest.php)
- `commands` 字段内是命令配置信息,详情请查看 "命令行" 章节。
- `beans` 字段内是依赖配置信息,详情请查看 "依赖注入" 章节,最新版本增加了 `beanPath` 字段取代该功能从目录中读取依赖配置。
- `commandPath` 指定命令配置的路径,可以是单个配置文件,也可以是一个配置目录,指定该字段时,`commands` 字段将被覆盖。
- `beanPath` 指定依赖配置的路径,可以是单个配置文件,也可以是一个配置目录,指定该字段时,`beans` 字段将被覆盖。
## 自定义配置
MixPHP 骨架代码中默认采用 [hassankhan/config](https://packagist.org/packages/hassankhan/config) 库完成用户自定义配置处理,该库支持多种配置文件类型:PHP, INI, XML, JSON, and YAML
### [Mix-Skeleton](https://github.com/mix-php/mix-skeleton) 中使用
在 Web 开发骨架中我们建议将自定义配置通过 manifest.php 将配置注入到对应 class 中使用,因此为了能在 manifest.php 中也能获取到配置,我们做了以下处理:
- [bin/mix.php#L10](https://github.com/mix-php/mix-skeleton/tree/v2.1/bin/mix.php#L10) 在入口文件中实例化了全局变量 $config
- [app/functions.php](https://github.com/mix-php/mix-skeleton/tree/v2.1/app/functions.php) 定义了 config() 全局方法,方便快速获取
因此可在任意位置调用:
~~~
// 获取全部配置
config()->all();
// 获取指定配置
config()->get('foo');
// 指定默认值
config()->get('bar', 0);
~~~
### [Mix-Phar-Skeleton](https://github.com/mix-php/mix-phar-skeleton) 中使用
在开发 Phar 单文件命令行时,由于单文件的特殊性,配置文件都在程序代码之外,所以需要启动程序后再加载配置因此框架骨架中配置了 [hassankhan/config](https://packagist.org/packages/hassankhan/config) 库的依赖注入:
- [manifest.php#L109](https://github.com/mix-php/mix-phar-skeleton/blob/master/manifest.php#L109)
可直接在代码中通过依赖注入实例化,再获取配置:
~~~
/** @var \Noodlehaus\Config $config */
$config = context()->get('config');
// 获取全部配置
$config->all());
// 获取指定配置
$config->get('foo');
// 指定默认值
$config->get('bar', 0);
~~~
';