php字段验证规则,ThinkPHP 自动验证及验证规则详解
ThinkPHP 自动验证及验证规则详解
ThinkPHP 自动验证
ThinkPHP 内置了数据对象的自动验证功能来完成模型的业务规则验证。自动验证是基于数据对象的,而大多情况下数据对象是基于
$_POST表单 (不是绝对的)创建的。
基本的自动验证功能包括:必须字段、email邮箱格式、唯一性、URL地址、数字、两个字段是否相同、是否等于某个值等。
要使用系统的自动验证功能,只需要在对应的 Model类 里面定义 $_validate
属性(由多个验证因子组成的数组),语法如下:
protected $_validate = array(
array(验证字段,验证规则,错误提示[,验证条件][,附加规则][,验证时间])
};
ThinkPHP自动验证格式说明:
验证因子
说明
验证字段
必须。需要验证的表单字段名称,这个字段不一定是数据库字段,也可以是表单的一些辅助字段,例如验证码等。
验证规则
必须。要进行验证的规则,需要联合附加规则一起使用。
错误提示
必须。当验证不通过时的提示信息。
验证条件
可选。包括:
Model::EXISTS_TO_VAILIDATE 或者 0 :存在字段就验证(默认)
Model::MUST_TO_VALIDATE 或者 1 :必须验证
Model::VALUE_TO_VAILIDATE 或者 2 :值不为空的时候验证
附加规则
可选。配合验证规则使用,包括:
regex:使用正则进行验证,表示前面定义的验证规则是一个正则表达式(默认)
unique:验证唯一性,系统会根据字段目前的值查询数据库来判断是否存在相同的值
confirm:验证表单中的两个字段是否相同,前面定义的验证规则是一个字段名
equal:验证是否等于某个值,该值由前面的验证规则定义
in:验证是否在某个范围内,前面定义的验证规则必须是一个数组
function:使用函数验证,表示前面定义的验证规则是一个函数名
callback:使用方法验证,前面定义的验证规则是当前 Model 类的一个方法
验证时间
可选。包括:
Model:: MODEL_INSERT 或者 1 :新增数据时候验证
Model:: MODEL_UPDATE 或者 2 :编辑数据时候验证
Model:: MODEL_BOTH 或者 3 :全部情况下验证(默认)
自动验证例子
下面的例子验证文章标题必须填写且检测标题是否已存在:
class ArticleModel extends Model{
protected $_validate = array(
array('title','require','标题不能为空!'),
array('title','','标题已经存在!',0,'unique',1),
};
}
在操作中,当使用 create 方法创建数据对象时会自动进行数据验证操作(当 POST 提交表单处理时):
$Article = D("Article");
if (!$Article->create()){
// 如果创建失败,表示验证没有通过(注:可能原因之一)输出错误提示信息
exit($Article->getError());
}else{
// 验证通过,继续下一步流程如将数据写入数据表
}
系统内置了一些常用正则验证的规则,包括:require(必须)、email(邮箱格式)、url(URL地址)、currency(货币)、number(数字)、qq(QQ号码)、english(英文字符),可以直接使用。
出于用户体验考虑,$Article->getError() 返回的错误提示信息,一般以 Ajax
方式返回,详细参见《ThinkPHP Ajax》。
定义自己的验证规则
当内置的这些验证规则无法满足验证要求是,可以定义自己的验证规则,如要求出生年月以 2000-1-1 格式输入时:
array('birthday','/^d{4}-d{1,2}-d{1,2}$/','出生年月格式错误!'),
可见,只需几行简单的代码,就实现了各种不同方式的表单验证,灵活使用 ThinkPHP
自动验证,可以让开发过程事半功倍。更多自动验证列子,参见本节内容之《ThinkPHP
自动验证实例》。
---------------------------------------------------------------------------------------
ThinkPHP 自动填充
ThinkPHP 内置了数据对象的自动填充功能,可以用来处理默认值、数据过滤以及其他系统写入字段的自动处理。
要使用自动填充功能,只需要在对应的 Model类 里面定义 $_auto
属性(由多个验证因子组成的数组)。$_auto 属性是由多个填充因子组成的数组,语法格式如下:
protected $_auto = array(
array(填充字段,填充内容[,填充条件][,附加规则])
};
ThinkPHP自动填充格式说明:
填充因子
说明
填充字段
必须。需要填充的表单字段,这个字段不一定是数据库字段,也可以是表单的一些辅助字段,例如验证码等。
填充内容
必须。要对字段自动填充的内容。
填充条件
可选。包括:
Model:: MODEL_INSERT 或者 1 :新增数据时候填充(默认)
Model:: MODEL_UPDATE 或者 2 :更新数据时候填充
Model:: MODEL_BOTH 或者 3 :全部情况下填充
附加规则
可选。包括:
string:字符串,表示填充内容为字符串(默认)
function:使用函数,表示填充的内容是一个函数返回值
callback:使用方法,表示填充的内容是一个当前 Model 的方法返回值
field:字段,表示填充的内容是一个其他字段的值
自动填充例子
用户注册或修改资料时,可能用到的自动填充例子:
class UserModel extends Model{
protected $_auto = array (
// 新增的时候把status字段设置为1
array('status','1'),
// 对password字段在所有情况下使用md5函数处理
array('password','md5',3,'function'),
// 对username字段在新增时回调getName方法
array('username','getName',1,'callback'),
// 对regdate字段在新增时写入当前时间戳
array('regdate','time',1,'function'),
// 对regip字段在新增时写入用户注册IP地址
array('regip','get_client_ip',1,'function'),
);
}
和自动验证一样,自动完成机制需要使用 create 方法才能生效:
$Article = D("User");
if(!$User->create()){
// 如果创建数据对象失败(可能是验证未通过等),输出错误提示信息
exit($Article->getError());
}else{
// 继续下一步流程如将数据写入数据表
}
提示
与自动验证不同的是,自动填充无效时(如调用一个不存在的函数或自动填充的字段不存在等)并不导致创建数据对象(create())失败,只能通过调试或实际数据入库来检测自动填充是否正确有效。
动态改变自动完成规则
和自动验证一样,可以在操作方法中使用 setProperty方法 动态的更改自动完成的规则:
$Dao = D("User");
$auto = array (
// 仅对password字段进行处理
array('password','md5',1,'function')
);
$User->setProperty("_auto",$auto);
if(!$User->create()){
……
}
M方法中使用自动填充功能
充分利用功能强大的 ThinkPHP
自动填充(自动完成)功能,能够快捷简便的构建表单入库数据,程序结构也会更加明晰。
----------------------------------------------------------------------------------
动态验证 setProperty 方法
通常来说,每个数据表对应的验证规则是相对固定的,但是在某些特殊的情况下面可能会改变验证规则。ThinkPHP 的 Model类
提供了 setProperty 方法,可以在操作中使用 setProperty 方法动态改变验证规则来满足不同条件下的验证:
setProperty 方法用于设置模型的属性值,语法如下:
setProperty(string name, mixed value)
例子:
$Article = D("Article");
$validate = array(
array('title','require','标题不能为空!',1), // 仅需验证标题不能为空
);
$Article->setProperty("_validate",$validate);
if (!$Article->create()){
// 如果创建失败,表示验证没有通过(注:可能原因之一)输出错误提示信息
exit($Article->getError());
}else{
// 验证通过,继续下一步流程如将数据写入数据表
}
上面的例子在操作里动态改变了原有的验证规则,从而实现不同条件下的自动验证。
提示
在操作中动态改变验证规则后,新的规则将直接覆盖原有的验证规则。ThinkPHP
还没有支持动态改变规则时对原有规则的追加、增减或者替换等更加灵活的动态改变方式。
-----------------------------------------------------------------
ThinkPHP M方法实现自动验证与自动填充
通常,我们会将自动验证与自动填充规则写入模型类里,然后再用 D 方法实例化模型类来实现对表单的自动验证与自动填充功能。由于 M
方法只是实例化基础模型类而不会去实现模型类里定义的逻辑,因此 M 方法一般情况下是无法完成自动验证与自动填充的。
ThinkPHP 提供的 setProperty 方法,可以动态更改 Model 的属性。在操作中,利用 setProperty
方法便可以在使用 M 方法(不创建模型类)时实现自动验证与自动填充功能。
setProperty 方法是 Model 类的内置方法,用于设置模型的属性值,语法如下:
setProperty(string name, mixed value)
例子:
$Article = M("Article");
// 自动验证规则
$validate = array(
array('title','require','标题不能为空!',1),
array('title','','标题已经存在',0,'unique',1),
array('content','require','内容必须',1),
);
// 自动填充规则
$_auto = array(
// 新增癿时候把 status 字段设置为 1
array('status','1',self::MODEL_INSERT),
// 新增癿时候把 create_time 字段设置为 time() 时间戳
array('create_time','time',self::MODEL_INSERT,'function'),
);
$Article->setProperty("_validate",$validate);
$Article->setProperty('_auto',$auto);
// 创建数据对象
if ($Article->create()){
// 创建数据对象成功,写入数据
$User->add();
}else{
// 创建数据对象失败
exit($Article->getError());
}
要在 M 方法中使用自动验证与自动填充,需要以数据对象的方式(create())写入数据,更多信息参见《ThinkPHP create 方法:表单数据智能写入》。
原则上讲,应该将自动验证与自动填充等逻辑在模型里面来完成,但 ThinkPHP 提供了 setProperty
方法,以方便在其他特殊情况(如使用 M 方法时)时也能实现自动验证与自动填充功能。
php字段验证规则,ThinkPHP 自动验证及验证规则详解相关推荐
- ThinkPHP模版引擎之变量输出详解
ThinkPHP模版引擎之变量输出详解 使用ThinkPHP开发有一定时间了,今日对ThinkPHP的模板引擎变量解析深入了解了一下,做出一些总结,分享给大家供大家参考.具体分析如下: 我们已经知道了 ...
- Java自动日志监控框架auto-log详解
Java自动日志监控框架auto-log详解 1. 需求概述 2. auto-log简介 2.1 auto-log定义 2.2 auto-log目的 2.3 auto-log特性 2.4 注解说明 2 ...
- 计算机自动获取IP地址流程详解
计算机自动获取IP地址流程详解 你知道吗? 我们在日常生活中直接插上网线接口就可以直接上网,不需要拨号上网也不需要设置IP地址.那么我们在日常是怎么获得IP地址的呢? 这里就需要介绍一种服务是由Int ...
- PHP宽带自动拨号,window_Win10怎么设置宽带自动连接 win10开机自动连接宽带设置方法详解,对于没有使用路由器中转,每 - phpStudy...
Win10怎么设置宽带自动连接 win10开机自动连接宽带设置方法详解 对于没有使用路由器中转,每次开机都需要进行宽带连接拨号上网的用户来说,每次打开电脑都需要打开宽带连接进行拨号才能正常上网是不是很 ...
- html中使用volist要引入什么,thinkphp中volist标签使用案例详解
这次给大家带来thinkphp中volist标签使用案例详解,thinkphp中volist标签使用的注意事项有哪些,下面就是实战案例,一起来看一下. 属性: name(必须):要输出的数据模板变量 ...
- 【Spring】Spring 自动注入(autowire)详解
1.概述 转载:添加链接描述 2. 手动注入的不足 [Spring]Spring 依赖注入之手动注入 上篇文章中介绍了依赖注入中的手动注入,所谓手动注入是指在xml中采用硬编码的方式来配置注入的对象, ...
- Spring学习第5篇:自动注入(autowire)详解
大家家好,我是一名网络怪咖,北漂五年.相信大家和我一样,都有一个大厂梦,作为一名资深Java选手,深知Spring重要性,现在普遍都使用SpringBoot来开发,面试的时候SpringBoot原理也 ...
- Spring第8篇:自动注入(autowire)详解
本文内容 手动注入的不足 Class.isAssignableFrom方法介绍 3种自动注入方式详解及案例 按名称自动注入 按类型自动注入 按构造器进行自动注入 按类型自动注入某种类型的所有bean给 ...
- Spring系列之自动注入(autowire)详解
本文内容 手动注入的不足 Class.isAssignableFrom方法介绍 3种自动注入方式详解及案例 按名称自动注入 按类型自动注入 按构造器进行自动注入 按类型自动注入某种类型的所有bean给 ...
最新文章
- Nginx学习之二-配置项解析及编程实现
- 演示:标准ACL的配置、及使用技巧、和相关局限
- CentOS 7环境安装Docker
- 一个演示A星相关的寻路的网站
- 【数字信号处理】基于DFT的滤波系列3之插值滤波(含MATLAB代码)
- js 逆向分析的神器 --- v_jstools
- 区块链学习笔记:D02 区块链的技术发展历史和趋势
- Atom飞行手册翻译: 1.3 Atom基础
- 互联网+法律兴起,品牌上线数量出现爆发
- C/C++ —— signed 与 unsigned 有符号和无符号数及其移位
- 数据挖掘技术有哪几种
- IS-IS详解(十七)——IS-IS 区域迁移与路由汇总
- break、continue
- HDU1286 找新朋友
- vs2017 安装MFC
- 直播行业市场分析:2022年构建多元化的直播生态体系
- 云服务器装桌面后怎么连接,云桌面具体的安装步骤是怎样的
- 磨刀不误砍柴工——VS生成事件
- Android应用市场和应用包名大全
- 科学计算机算方差与期望,期望、方差、协方差及相关系数的基本运算
热门文章
- jQuery在线地址
- html影院选座模板,jQuery在线选座(影院版)
- 免费申请6位QQ及其它骗术的真相(转自 黑客基地)
- Easy AR通过Http协议上传本地图片至云图库
- 解决图片下方的缝隙问题(display : inherit 或者 vertical-align : middle)
- 前端面试题全面整理-带解析 涵盖CSS、JS、浏览器、Vue、React、移动web、前端性能、算法、Node...
- Python爬取全民小视频网站视频,可爬取全站视频
- Linux之RHCE免密登录及HTTP详解
- Ubuntu下载安装搜狗输入法
- C# LockBits ImageLockMode.UserInputBuffer 裁切图片出现黑点 麻点 之解决办法