寫了一個PHP引數驗證的元件,放在composer裡面管理。
之前也用過各種框架裡面的validator,總覺得太重了,還是自己寫一個用起來方便。
輕噴~
安裝
-
在專案的composer.json檔案中的require項中新增:
"furthestworld/validator": "~1.0"
並更新composer依賴:
composer update
-
在需要使用Validator服務的地方新增:
require_once __ROOT__ . '/vendor/autoload.php';
use FurthestWorld\Validator\Src\Validator;
食用方法
//擴充套件驗證規則例項
Validator::extend('extend_test', new TestExtendRules());
Validator::formatParams(
$params,
[
'domain' => ['format_rule' => 'strtoupper', 'default_value' => ''],
'member_id' => ['format_rule' => 'formatExtendMemberId:domain']
]
);
Validator::validateParams(
$params,
[
'domain' => ['check_rule' => 'number#numberGt0|string#string:10,500'],
'member_id' => ['check_rule' => 'extendEq:20#number'],
]
);
if (!Validator::pass()) {
//驗證未透過
var_dump(Validator::getErrors());
} else {
//驗證透過
}
語法說明
引數格式化
-
format_rule
規則: 格式化方法(PHP函式或自定義函式):格式化引數(若為空則預設為當前欄位的值) -
default_value
引數預設值設定 -
force_value
強制重置引數
引數驗證
- check_rule
分隔符 |
:或驗證
(滿足其中的至少一項驗證)
分隔符 #
:與驗證
(滿足其中所有的驗證項)
分隔符 :
:方法和引數分隔符
分隔符 ,
:多個引數分隔符
如上面的規則:'number#numberGt0|string#string:10,500'
解析成PHP程式碼邏輯相當於:
if((number && numberGt0) || (string && string:10,500)){
...
}
為了避免方法名和PHP關鍵字衝突,對應規則中的方法在解析成方法名時會自動加上字首
check
比如上面的number
、numberGt0
、string
驗證方法對應的方法分別為:checkNumber
、checkNumberGt0
、checkString
規則例項擴充套件
format_rule
和 check_rule
除了使用元件自帶的格式化和驗證方法,也支援自定義方法。
只需要把自定義的規則例項註冊到元件的擴充套件規則中就可以了,如:
Validator::extend('extend_test', new TestExtendRules());
enjoy~ :)
本作品採用《CC 協議》,轉載必須註明作者和本文連結