# 驗證器 #
驗證器就像是道路紅綠燈一樣,是基礎設施。我在這個上也投入了比較多的心思。
## 驗證器的使用 ##
### 基本使用 ###
首先新建一個校驗類,比如 `ArticleAdd`,并且繼承 `src\framework\Validation` 類。
class ArticleAdd extends Validation{}
然后在類里添加驗證規則,例如字符串:
protected $title = array('require', 'string',1,20,'文章標題必須在 10 到 20 個字符以內!');
最后再控制器中使用該校驗器,如下:
$params = Request::post();
(new ArticleAdd())->eachFields($params);
### 方法驗證中使用參數注入 ###
對于復雜的校驗,我們可以使用方法校驗。即指定類型為`Method`,
自己指定方法所在的類名和方法名,如下代碼:
```
protected $word = [
'type' => 'Method',
'class' => 'app\\common\\verifications\\WordAdd',
'method_name' => 'wordMustNotExist',
'message' => '該單詞已經存在!'
];
```
使用方法驗證可以對單個值進行復雜的校驗,比如檢查是否在數據庫中存在。
但有時候我們需要借助其他的參數來校驗某個參數,比如我們需要檢查某個用戶下
是否已經存在某個數據的時候,我們可以使用在方法驗證中使用參數注入。
在方法驗證中,我們可以使用`injection_args`屬性來指定注入的參數,前提是注入的參數
需要出現在校驗的參數中,可以通過如下的代碼加入欲注入的參數:
```
$params = Request::post();
$params['user_id'] = $this->uid;
(new WordAdd())->eachFields($params);
// 在校驗類中指定注入參數
protected $word = [
// 其他參數
'injection_args' => ['user_id'], // 參數注入
'message' => '該用戶已經添加該單詞'
];
```
### 多重驗證 ###
有時候,我們需要對一個字段進行復雜的組合驗證。比如在單詞本的應用中,在添加一個單詞的時候,
,即需要檢驗其基本的數據類型,又要檢驗其是否在數據表中存在。
這時候,我們就可以使用多重驗證功能。
在驗證類中,添加驗證規則如下,與基本驗證不同的是,多重驗證是二維數組:
```
protected $word = [
[
'require' => true,
'type' => 'String',
'length' => '1,64',
'message' => '單詞必須在 1 到 64 個字符以內!'
],
[
'type' => 'Method',
'class' => 'app\\common\\verifications\\WordAdd',
'method_name' => 'wordMustNotExist',
'message' => '該單詞已經存在!'
]
];
```
多重驗證允許我們將多個驗證規則寫成二維數組。