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; } ?>
相关文章推荐
- 一个关于if else容易迷惑的问题
- PHP5.2.*防止Hash冲突拒绝服务攻击的Patch
- 深入理解PHP之匿名函数
- JSP/PHP基于Ajax的分页功能实现
- 关于PHP通过PDO用中文条件查询MySQL的问题。
- 什么是设计模式
- PHP数据库长连接mysql_pconnect的细节
- kindeditor 批量上传 上传失败 thinkphp swfupload session
- Php Installing An Expansion
- PHP+Apache在Windows 9x下的安装和配置
- IIS 6 的 PHP 最佳配置方法
- 安装Apache和PHP的一些补充
- Linux Apache+MySQL+PHP
- 建立Apache+PHP+MySQL数据库驱动的动态网站
- PHP 5.3.0 安装分析心得
- 总结一周内学习的Sql经验(一)
- apache 环境下 php 的配置注意事项
- ASP.NET、ASP、PHP、JSP之间有什么区别?
- PHP VBS JS 函数 对照表