# Swoft配置
Swoft的配置分为两类,环境配置和应用配置。
### 环境配置
环境配置是用于不常改动的跟环境相关的配置参数,例如:运行模式、资源地址等等。
在项目的根目录有一个 `.env.example` 如果要使用则把文件修改成 `.env`,配置就可以在里面使用。
#### .env
```php
APP_DEBUG = 0
SWOFT_DEBUG = 0
TEST_NAME = 测试名称
```
#### .env 文件的使用
```php
env(string $key = null, $default = null)
```
* $key 配置参数key,如:`TEST_NAME`
* $default 默认参数,当key不存在的时候返回default
`env` 还有另一个功能,就是可以把操作系统的环境变量加载到内存里面。
```php
echo env('PATH');
```
输出操作系统的环境变量 `PATH`
### 应用配置
应用配置主要用于业务级别的配置
在 `app/bean.php` 添加如下配置,不添加默认就是应用根目录下的 `config`
```php
return [
...
'config' => [
'path' => __DIR__ . '/../config',
],
...
];
```
可配置项:
* path 自定配置文件路径
* base 主文件名称,默认 base (其他文件的数据都会按文件名为key合并到主文件数据中)
* type 配置文件类型,默认 php 同时也支持 yaml 格式
* parser 配置解析器,默认已经配置 php/yaml 解析器。
* env 配置当前环境比如 dev/test/pre/pro
应用配置是负责应用里面的配置管理,负责第三方sdk的配置信息和开发者定义的配置;应用配置的数据也是由一个bean管理的,如果我们想要配置第三方sdk或者新增自己定义的配置,只需要在 `config` 目录添加对应文件返回一个数组就可以了。
#### config/pay.php
```php
return [
'notify_url' => 'http://127.0.0.1/pay/notify',
];
```
这里的配置是全局的,在应用里面可直接使用。
### 配置使用
#### 全局助手函数 `config()`
```php
config(string $key = null, $default = null)
```
* $key 配置参数key,如:`config/pay.php` 获取方式就是 `config('pay.notify_url','')`
* $default 默认参数,当key不存在的时候返回default
```php
$notify_url = config('pay.notify_url','');
```
#### 对象获取
```php
/** @var Config $config */
$config = \Swoft::getBean('config');
$notify_url = $config->get('pay.notify_url');
```
#### 注解
在要使用配置的地方可以把配置注入到类的成员属性。
```php
use Swoft\Config\Annotation\Mapping\Config;
/**
* @Config("pay.notify_url")
* @var mixed
*/
private $notify_url;
```
### 不同环境相同配置
如果想要在不同环境配置不同的配置,例如在测试环境一套配置,生产环境一套配置,我们可以通过文件夹的方式来区分。
#### config/dev/db.php
```php
return [
'dsn' => 'mysql:dbname=lv;host=127.0.0.1'
];
```
#### config/pro/db.php
```php
return [
'dsn' => 'mysql:dbname=lv1;host=127.0.0.1'
];
```
#### app/bean.php
```php
return [
...
'config' => [
'path' => __DIR__ . '/../config',
'env' => 'pro'
],
'db' => [
...
'dsn' => config('db.dsn'),
...
],
...
];
```
这个配置使用的配置是 `config/pro/db.php`; `env` 配置是在 `config` 对应的目录,例如:`env` 是 `dev` 那么对应的文件就是 `config/dev/db.php`
如果想用 `config` 文件夹里面的配置在 `app/bean.php` 生效,可以在 `app/bean.php` 使用 `config()` 全局函数获取配置设置到对应到配置项。
- 第一章:基础知识
- 课程简介
- PHP-FPM过渡常驻内存
- 进程
- 实战:实现Master-Worker
- 线程
- 实战:CC攻击器
- 协程
- 实战:实现waitGroup功能
- 进程、线程、协程的区别
- 第二章:初识Swoft2.0
- Swoft介绍
- Swoft环境安装
- gcc升级
- 安装Swoft框架
- 目录结构介绍
- SwoftCli工具
- Swoft配置
- 第三章:Swoft2.0核心
- 上下文
- 常驻内存没有上下文隔离
- 实战:手写swoole框架上下文管理
- Bean容器
- 实战:根据容器原理实现容器
- 实战:通过容器实现依赖注入
- Bean容器定义与使用
- 配置文件定义Bean
- 容器类型
- 面向接口的容器
- 注解
- 实战:实现注解
- 自定义Swoft注解类
- 事件
- 连接池
- 实战:Swoole实现连接池
- 第四章:Http服务器
- Http Server生命周期
- Http Server配置
- 控制器
- 路由
- 请求对象Request
- 响应对象Response
- Http异常处理
- 中间件
- 实战:中间件实现JWT登陆授权
- 第五章:验证器
- 内置验证类型
- 验证器的使用
- 自定义验证器
- 第六章:数据库操作
- 连接数据库
- 实体模型
- 模型事件
- 查询器
- 事务处理
- 连接池配置
- 读写分离
- 多数据库切换
- Models分层结构
- 实战:实现用户CURD API
- 第七章:Redis
- 连接redis和使用
- Redis连接池
- Redis集群配置(单机版)
- Redis集群配置(多服务器)
- Redis连接集群
- Redis实战:实现延时任务
- 第八章:AOP编程
- AOP概念
- AOP实现原理
- 实战实现AOP:静态代理
- 实战实现AOP:动态代理
- 切面注解介绍
- PointExecution切面
- PointBean切面
- PointAnnotation切面
- 实战:使用AOP实现日志记录
- 第九章:任务处理
- 进程使用
- 进程池使用
- 实战:进程消费队列
- 实战:进程实现RabbitMQ延时队列
- 异步任务
- 协程任务
- 定时任务