## 环境配置 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); ~~~