# 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延時隊列
- 異步任務
- 協程任務
- 定時任務