## 环境配置
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);
~~~
- 欢迎使用 MixPHP
- 安装说明
- 全栈安装
- Phar 开发安装
- 新手教程
- 命令行常识
- 进程管理
- 热更新
- 全局变量
- 入门须知
- 命名空间
- 自动加载
- 入口文件
- 增改应用
- 核心功能
- 配置 (manifest.php)
- 协程
- 什么是协程
- 开启协程
- PHP Stream Hook
- xgo + Channel
- WaitGroup + xdefer
- 连接池
- 协程池
- 定时器
- 依赖注入
- 事件调度
- 命令行
- 简介
- Application
- 创建命令
- 命令参数
- 打印与颜色
- 守护进程
- 后台运行
- Web/API 应用
- 简介
- 服务器
- 路由
- 中间件
- 请求
- 文件上传
- 响应
- 控制器
- 视图
- Auth
- Session
- 客户端
- GuzzleHttp
- 调试与错误
- 安全建议
- WebSocket 应用
- 简介
- 服务器
- 客户端
- JavaScript
- Swoole
- nginx代理
- 60s无消息断线
- TCP 应用
- 简介
- 服务器
- 客户端
- Telnet
- PHP
- Swoole
- UDP 应用
- 简介
- 服务器
- 客户端
- NC
- Swoole
- Sync Invoke 同步调用
- 简介
- 服务器
- 客户端
- 公共组件
- 验证器
- 验证器定义
- 验证规则
- 静态调用
- 日志
- 缓存
- 数据库
- Database
- ConnectionPool
- Connection
- QueryBuilder
- ExecutedEvent
- Redis
- ConnectionPool
- Connection
- CalledEvent
- 常见问题
- 如何利用CPU多核
- 连接多个数据库
- 使用主从数据库
- 如何设置跨域
- form-data 上传文件失败
- 输出大于2M的文件失败 (xlsx)
- 如何接入EasyWeChat
- 升级指导
- 不兼容修改-001
- 不兼容修改-002
- 不兼容修改-003