您的位置:首页 > 编程语言 > PHP开发

thinkphp模型验证总结

2015-07-15 17:41 633 查看

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', '瓶数请填写数字'),
// 2 值不为空的时候验证
array('email', 'email', '邮箱地址不合法', 2),
// in
array('is_origin_box', array('是', '否'), '请填写是或否', 2, 'in'),
array('gender', array('男', '女', '保密'), '请填写男、女或保密', 2, 'in'),
// between 1901~今年
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),
// unique
// 在新增的时候验证username字段是否唯一
array('username', '', '用户名已经存在', 0, 'unique', 1),
// cofirm 验证表单中的两个字段是否相同,定义的**验证规则**是一个字段名
array('password_confirmation', 'password', '两次输入密码不一致', 0, 'confirm'),
// callback 方法验证,定义的验证规则是**当前模型类**的一个方法
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),
// 在新增的时候验证username字段是否唯一
array('username', '', '用户名已经存在', 0, 'unique', 1),
array('password_confirmation', 'password', '两次输入密码不一致', 0, 'confirm'),
array('username', 'checkUsername', '用户名中含有非法字符', 2, 'callback'),
array('password', 'checkPwd', '密码格式不正确', 0, 'function'),
);


定义好验证规则后,就可以在使用create方法创建数据对象的时候自动调用


// 实例化user对象
$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),
// 在新增的时候验证username字段是否唯一
array('username', '', '用户名已经存在', 0, 'unique', 1),
array('password_confirmation', 'password', '两次输入密码不一致', 0, 'confirm'),
array('username', 'checkUsername', '用户名中含有非法字符', 2, 'callback'),
array('password', 'checkPwd', '密码格式不正确', 0, 'function'),
);

// 实例化user对象
$user = M('user');
if (!$user->validate($rules)->create()) {
// 如果创建失败,表示验证没有通过,输出错误提示信息
exit($user->getError());
}
// 验证通过,执行后续操作
// todo


举个栗子

// 附加规则 function
// 自定义函数验证密码格式
array('password', 'checkPwd', '密码格式不正确', 0, 'function'),


create function.php

// 注意php文件名好像只能是 function.php
Application/Common/Common/function.php


function.php

<?php

function checkPwd($password)
{
// handle $password
// todo

// return true;
// or
// return false;
}

?>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  php thinkphp 总结