thinkphp模型验证总结

本文总结了ThinkPHP框架中模型的自动验证功能,包括静态定义和动态验证的使用方法,并通过具体的代码示例进行详细解释。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
}


?>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值