php thinkphp 模型自动验证 静态定义 动态验证
定义 demos
验证字段, 验证规则, 错误提示,[ 验证条件, 附加规则, 验证时间])
验证条件(可选)
包含下面几种情况:
0 存在字段就验证(默认)
1 必须验证
2 值不为空的时候验证
验证时间(可选)
self::MODEL_INSERT 或者 1 新增数据时候验证
self::MODEL_UPDATE 或者 2 编辑数据时候验证
self::MODEL_BOTH 或者 3 全部情况下验证(默认)
这里的**验证时间**需要注意,并非只有这三种情况,你可以根据业务需要增加其他的验证时间
array('name', 'require', '酒的名称必须填写', 1),
array('username', 'require', '用户名不可为空', 1),
array('quantity', 'number', '瓶数请填写数字'),
array('email', 'email', '邮箱地址不合法', 2),
array('is_origin_box', array('是', '否'), '请填写是或否', 2, 'in'),
array('gender', array('男', '女', '保密'), '请填写男、女或保密', 2, 'in'),
array('year', array(1901, 2015), '年份填写范围需为1901~今年', 2, 'between'),
array('username', '/^.*[^\d].*$/', '用户名不可为纯数字', 2),
array('birthday', '/^\d{4}-\d{2}-\d{2}$/', '生日填写不规范', 2),
array('phone', '/^13[0-9]{1}[0-9]{8}$|15[01689]{1}[0-9]{8}$|18[289][0-9]{8}$/', '手机号码格式不正确', 2),
array('username', '', '用户名已经存在', 0, 'unique', 1),
array('password_confirmation', 'password', '两次输入密码不一致', 0, 'confirm'),
array('username', 'checkUsername', '用户名中含有非法字符', 2, 'callback'),
array('password', 'checkPwd', '密码格式不正确', 0, 'function'),
静态定义
在模型类里面定义 $_validate 属性
protected $_validate = array(
array('username', 'require', '用户名不可为空', 1),
array('email', 'email', '邮箱地址不合法', 2),
array('gender', array('男', '女', '保密'), '请填写男、女或保密', 2, 'in'),
array('year', array(1901, 2015), '年份填写范围需为1901~今年', 2, 'between'),
array('username', '/^.*[^\d].*$/', '用户名不可为纯数字', 2),
array('username', '', '用户名已经存在', 0, 'unique', 1),
array('password_confirmation', 'password', '两次输入密码不一致', 0, 'confirm'),
array('username', 'checkUsername', '用户名中含有非法字符', 2, 'callback'),
array('password', 'checkPwd', '密码格式不正确', 0, 'function'),
);
定义好验证规则后,就可以在使用create方法创建数据对象的时候自动调用
$user = D('user');
if (!$user->create()) {
exit($user->getError());
}
静态定义方式因为必须定义模型类,所以只能用D函数实例化模型
动态验证
$rules = array(
array('username', 'require', '用户名不可为空', 1),
array('email', 'email', '邮箱地址不合法', 2),
array('gender', array('男', '女', '保密'), '请填写男、女或保密', 2, 'in'),
array('year', array(1901, 2015), '年份填写范围需为1901~今年', 2, 'between'),
array('username', '/^.*[^\d].*$/', '用户名不可为纯数字', 2),
array('username', '', '用户名已经存在', 0, 'unique', 1),
array('password_confirmation', 'password', '两次输入密码不一致', 0, 'confirm'),
array('username', 'checkUsername', '用户名中含有非法字符', 2, 'callback'),
array('password', 'checkPwd', '密码格式不正确', 0, 'function'),
);
$user = M('user');
if (!$user->validate($rules)->create()) {
exit($user->getError());
}
举个栗子
// 附加规则 function
// 自定义函数验证密码格式
array('password', 'checkPwd', '密码格式不正确', 0, 'function'),
create function.php
// 注意php文件名好像只能是 function.php
Application/Common/Common/function.php
function.php
<?php
function checkPwd($password)
{
}
?>