## 模型驗證
通過在模型中設置 validate 屬性可以方便的進行數據驗證,模型驗證繼承了 [Validate 驗證組件](http://www.hmoore.net/houdunwang/hdphp3/215225),所以驗證服務中在的所有方法均可以使用。
因為使用了 [Validate 驗證組件](http://www.hmoore.net/houdunwang/hdphp3/215225) 當發現錯誤時的處理方式與 Validate組件處理相同,請查看 Validate組件 關于**處理方式**的相關內容。
[TOC]
## 語法
```
array(字段名,驗證方法,錯誤信息,驗證條件,驗證時機)
驗證條件 (可選):
self::EXISTS_VALIDATE 值:1 有字段時
self::NO_EMPTY_VALIDATE 值:2 值不為空時
self::MUST_VALIDATE 值:3 必須驗證
self::EMPTY_VALIDATE 值:4 值為空時驗證
self::NO_EXIST_VALIDATE 值:5 不存在字段時處理
驗證時間 (可選):
self::MODEL_INSERT 值:1 插入時處理
self::MODEL_UPDATE 值:2 更新時處理
self::MODEL_BOTH 值:3 全部情況時處理
```
> 當驗證不通過時,系統會自動進行跳轉,如果是 ajax 請求返回json數據。
#### 正則表達式驗證
如果函數是正則表達式,系統會自動以正則驗證
```
namespace system\model;
use houdunwang\model\Model;
class Field extends Model{
protected $validate=[
['age','/^\d+$/','年齡必須是數字',self::MUST_VALIDATE,self::MODEL_BOTH]
];
}
```
#### 表值碓一驗證
```
protected $validate = array(
//驗證username的值必須在user_table表中唯一
//系統可以根據數據中的主鍵字段自動分析,也就是說更新時會忽略當前字段相同值
//也就是說最后2個參數都設置為3即可
['username','unique','用戶已存在',self::MUST_VALIDATE,self::MODEL_BOTH]
);
//更新時,本次更新的記錄數據有相同字段值是可以的。
```
## 自定義驗證規則
```
namespace system\model;
use houdunwang\model\Model;
class userModel extends Model {
protected $validate = array(
['username', 'checkUser', '用戶名長度錯誤',self::MUST_VALIDATE,self::MODEL_BOTH]
);
//以下是自定義的驗證規則
//$field 字段名
//$value 字段值
//$params 參數比如 maxlen:10 10就是參數
//$data 所有表單數據
public function checkUser($field, $value, $params, $data)
{
//返回true,為驗證通過
if (mb_strlen($value, 'utf-8') > 5) {
return true;
}
}
}
```
## 系統規則
以下羅列出部分 [自動驗證組件](http://www.hmoore.net/houdunwang/hdphp3/215225) 提交的方法,這些驗證規則都可以在模型驗證中使用。
```
required 字段不存在時驗證失敗
exists 字段存在時驗證失敗
email 郵箱
http 網址
tel 固定電話
phone 手機
zipCode 郵政編碼
user 用戶名長度如 :user:5,20
maxlen 最大長度如:maxlen:10
minlen 最小長度如:minlen:10
num 數字范圍 如:num:20,60
regexp 正則如:regexp:/^\d{5,20}$/
confirm 兩個字段值比對如:confirm:password2
china 驗證中文
identity 身份證
```
## 驗證順序
參與到驗證的動作包括,模型方法、系統驗證規則,驗證順序如下:
1. 模型中是否存在同名的驗證方法函數
2. 系統驗證類中是否存在同名的驗證方法
3. 驗證方法否為正則表達式
4. 以上3項都沒有則本條規則忽略
## 顯示錯誤
#### redirect 模式
當配置項的錯誤處理設置為 redirect 時,系統會員向模板中分配包含錯誤信息的變量 $errors,所以可以要模板中使用以下方式顯示錯誤。
```
<if !empty($errors)>
<if value="$errors">
<foreach from="$errors" value="$e">
<li>{{$e}}</li>
</foreach>
</if>
```
#### show 模式
當配置項的錯誤處理設置為 show 時,系統將使用 config/validate.php 配置文件中的 template 配置項指定的模板顯示錯誤。
> 模型驗證使用 Validate 組合處理,所以更多功能請查看 [Validate 驗證組件](http://www.hmoore.net/houdunwang/hdphp3/215225) 說明文檔。
- 文檔已經遷移到后盾人
- 介紹
- 框架特性
- 開發規范
- 許可協議
- 作者向軍
- 安裝框架
- 更新框架
- 基礎
- 入口文件
- 應用配置
- 優雅鏈接
- 目錄結構
- 系統常量
- 自動加載
- 應用密鑰
- 系統函數
- CSRF保護
- 依賴注入
- 跨域訪問
- 配置
- 配置文件
- 基本功能
- 擴展配置
- c 函數
- 控制器
- 定義聲明
- 基本使用
- 相關函數
- 響應消息
- 路由
- 基礎知識
- 基礎路由
- 路由參數
- 參數檢測
- 依賴注入
- 控制器
- 分組路由
- RESTful
- 別名路由
- 數據
- 配置相關
- 核心操作
- 查詢構造器
- 日志記錄
- 分頁處理
- 事務處理
- 函數相關
- 數據庫
- 數據遷移
- 數據填充
- 模型
- 定義模型
- 模型動作
- 模型驗證
- 自動完成
- 自動過濾
- 字段保護
- 數據填充
- 多表關聯
- 分頁處理
- 倉庫
- 數據倉庫
- 查詢規則
- 視圖
- 基礎知識
- 模板配置
- 模板文件
- 分配數據
- 系統標簽
- 擴展標簽
- 緩存模板
- 模板繼承
- 視圖函數
- widget
- vue組件
- 中間件
- 中間件
- 緩存
- 基本操作
- 文件緩存
- 數據表緩存
- 服務
- 服務容器
- 定制服務
- 相關函數
- 請求
- 基本使用
- 請求擴展
- 測試
- 基礎知識
- 基本使用
- HTTP測試
- 調試
- 調試模式
- 日志管理
- 組件
- 多語言
- 響應處理
- Cookie
- Session
- 驗證碼
- XML
- 自動驗證
- 文件處理
- 壓縮解壓
- RBAC
- 數組增強
- 分頁管理
- 圖像處理
- 生成靜態
- 加密解密
- 字符串
- 數據集合
- 工具服務
- 目錄操作
- 郵件發送
- CURL
- QQ登錄
- 數據備份
- 購物車
- 日志處理
- 命令組件
- 二維碼
- 后盾云
- 日期處理
- 阿里
- 支付寶
- 阿里云直播
- 阿里云短信
- 阿里云郵件
- 阿里云OSS
- SOCKET
- 啟動與關閉
- 前端
- 微信