## 模型验证
通过在模型中设置 validate 属性可以方便的进行数据验证,模型验证继承了 [Validate 验证组件](http://www.kancloud.cn/houdunwang/hdphp3/215225),所以验证服务中在的所有方法均可以使用。
因为使用了 [Validate 验证组件](http://www.kancloud.cn/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.kancloud.cn/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.kancloud.cn/houdunwang/hdphp3/215225) 说明文档。
- 文档已经迁移到后盾人
- 介绍
- 框架特性
- 开发规范
- 许可协议
- 作者向军
- 安装框架
- 更新框架
- 基础
- 入口文件
- 应用配置
- 优雅链接
- 目录结构
- 系统常量
- 自动加载
- 应用密钥
- 系统函数
- CSRF保护
- 依赖注入
- 跨域访问
- 配置
- 配置文件
- 基本功能
- 扩展配置
- c 函数
- 控制器
- 定义声明
- 基本使用
- 相关函数
- 响应消息
- 路由
- 基础知识
- 基础路由
- 路由参数
- 参数检测
- 依赖注入
- 控制器
- 分组路由
- RESTful
- 别名路由
- 数据
- 配置相关
- 核心操作
- 查询构造器
- 日志记录
- 分页处理
- 事务处理
- 函数相关
- 数据库
- 数据迁移
- 数据填充
- 模型
- 定义模型
- 模型动作
- 模型验证
- 自动完成
- 自动过滤
- 字段保护
- 数据填充
- 多表关联
- 分页处理
- 仓库
- 数据仓库
- 查询规则
- 视图
- 基础知识
- 模板配置
- 模板文件
- 分配数据
- 系统标签
- 扩展标签
- 缓存模板
- 模板继承
- 视图函数
- widget
- vue组件
- 中间件
- 中间件
- 缓存
- 基本操作
- 文件缓存
- 数据表缓存
- 服务
- 服务容器
- 定制服务
- 相关函数
- 请求
- 基本使用
- 请求扩展
- 测试
- 基础知识
- 基本使用
- HTTP测试
- 调试
- 调试模式
- 日志管理
- 组件
- 多语言
- 响应处理
- Cookie
- Session
- 验证码
- XML
- 自动验证
- 文件处理
- 压缩解压
- RBAC
- 数组增强
- 分页管理
- 图像处理
- 生成静态
- 加密解密
- 字符串
- 数据集合
- 工具服务
- 目录操作
- 邮件发送
- CURL
- QQ登录
- 数据备份
- 购物车
- 日志处理
- 命令组件
- 二维码
- 后盾云
- 日期处理
- 阿里
- 支付宝
- 阿里云直播
- 阿里云短信
- 阿里云邮件
- 阿里云OSS
- SOCKET
- 启动与关闭
- 前端
- 微信