表單驗證
框架提供了一套完整的表單驗證解決方案,適用于絕大多數場景。
表單驗證支持所有類型的驗證以及自定義方法
簡單示例:namespaceapp\form;
usebiny\lib\Form;
/**
* @property \app\service\testService $testService
* 自定義一個表單驗證類型類 繼承Form
*/
classtestFormextendsForm
{
// 定義表單參數,類型及默認值(可不寫,默認null)
protected$_rules=[
// id必須為整型, 默認10
'id'=>[self::typeInt,10],
// name必須非空(包括null, 空字符串)
'name'=>[self::typeNonEmpty],
// 自定義驗證方法(valid_testCmp)
'status'=>['testCmp']
];
// 自定義驗證方法
publicfunctionvalid_testCmp()
{
// 和Action一樣可以調用Service和DAO作為私有方法
if($this->testService->checkStatus($this->status)){
// 驗證通過
return$this->correct();
}else{
// 驗證失敗,參數可以通過getError方法獲取
return$this->error('非法類型');
}
}
}
定義完驗證類,然后就可以在Action中使用了,可以通過getForm方法加載表單// 加載testForm
$form=$this->getForm('test');
// 驗證表單字段,true/false
if(!$form->check()){
// 獲取錯誤信息
$error=$form->getError();
return$this->error('參數錯誤');
}
// 獲取對應字段
$status=$form->status;
// 獲取全部字段 返回數組類型 ['id'=>1, 'name'=>'billge', 'status'=>2]
$data=$form->values();
注意:在$_rules中未定義的字段,無法在$form中被獲取到,就算不需要驗證,也最好定義一下
在很多情況下,表單參數并不是都完全相同的,系統支持Form復用,即可以在通用的Form類中自定義一些內容
比如,還是上述例子的testForm,有個類似的表單,但是多了一個字段type,而且對于status的驗證方式也需要變化
可以在testForm中添加一個方法// 在testForm中添加
publicfunctionaddType()
{
// 添加type字段, 默認'default', 規則為非空
$this->_rules['type']=[self::typeNonEmpty,'default'];
// 修改status的判斷條件,改為valid_typeCmp()方法驗證,記得要寫這個方法哦
$this->_rules['status'][0]='typeCmp';
}
然后在Action中加載表單也需要添加'addType'作為參數,其他使用方法一致$form=$this->getForm('test','addType');
一個表單驗證類里可以寫多個附加方法,相互直接并不會有任何影響
驗證類型
系統提供了7種默認驗證方式,驗證失敗時都會記錄錯誤信息,用戶可以通過getError方法獲取
self::typeInt 數字類型,包括整型浮點型,負數
self::typeBool 判斷是否為true/false
self::typeArray 判斷是否為數組類型
self::typeObject 判斷是否為對象數據
self::typeDate 判斷是否為一個合法的日期
self::typeDatetime 判斷是否為一個合法的日期時間
self::typeNonEmpty 判斷是否非空(包括null, 空字符串)
self::typeRequired 有該參數即可,可以為空字符串
驗證類型幾乎涵蓋了所有情況,如果有不能滿足的類型,用戶可以自定義驗證方法,上述例子中已有,不再過多闡述