是的,又一個引數驗證工具包——validator

xuanskyer發表於2017-07-13

寫了一個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
比如上面的numbernumberGt0string 驗證方法對應的方法分別為: checkNumbercheckNumberGt0checkString

規則例項擴充套件

format_rulecheck_rule 除了使用元件自帶的格式化和驗證方法,也支援自定義方法。
只需要把自定義的規則例項註冊到元件的擴充套件規則中就可以了,如:

Validator::extend('extend_test', new TestExtendRules());

enjoy~ :)

本作品採用《CC 協議》,轉載必須註明作者和本文連結
世界不可能那麼遠!

相關文章