Thinkphp自动验证 – 静态验证和动态验证

在我们将提交的表单数据插入或更新到数据库中时,一般都需要对表单数据进行验证,排除不符合我们要求的数据。

Thinkphp为我们提供很好的自动验证方法,在使用create()创建数据对象时会对提交的数据进行自动验证。

静态验证

静态验证是指在模型中预先定义好验证规则,然后在控制器中自动调用该模型进行数据验证。下面介绍下具体步骤:

1.在Model目录中创建model类,类文件名称有严格要求,必须跟数据库表名相关,如 UserModel.class.php (数据库表 user 的类)

namespace Home\Model;
use Think\Model;

class UserModel extends Model{
	protected $_validate = array(
		array("username","require","用户名必须填写"),
		array("username","6,18","用户名的长度必须在6到18个字节",0,"length",3),
		array("email","email","邮箱格式不正确"),
	);
}

注意:静态验证定义验证规则时,必须使用 protected $_validate = array(); (该成员属性必须用protected 且 属性名称必须是 $_validate)。数组里的验证规则可以参考下面的验证规则

2.在控制器中,使用create()创建数据对象时,直接默认调用

$user = D("user");
if(!$user->create()){
	$this->error($user->getError());
}else{
	echo 'success';
}

注意:必须使用 D 实例化数据库表,而不能使用M。例如,用D实例化数据库表 user 时,会同时调用模型类 user。(因此模型类文件名称必须是UserModel.class.php)。另外,用$user->getError() 是获取我们规则里设置的验证不成功的提示信息。

动态验证

使用动态验证比较灵活,不需要创建Model类。只需要在控制器中定义验证规则即可。缺点是动态验证规则只在当前方法中有效,无法重复使用。

//定义动态验证的变量名可以随意设置
$rules = array(
	array("username","require","用户名必须填写"),
	array("username","6,18","用户名长度必须在6到18位",1,"length",3),
	array("email","email","邮箱格式不正确"),
);
$user = M("user");
//创建数据对象前,使用validate()进行验证
if(!$user->validate($rules)->create()){
	$this->error($user->getError());
}else{
	echo 'success';
}

注意:动态验证用M实例化数据库表。

验证规则

验证规则是放在一个二位数组。格式如下

array(
  array(验证字段1,验证规则,错误提示[,验证条件,附加规则,验证时间]),
  array(验证字段2,验证规则,错误提示[,验证条件,附加规则,验证时间]),
  ......
)

1.验证字段(必须):就是提交表单的字段

2.验证规则(必须):验证规则需要跟附加规则一起使用,不过Thinkphp系统也内置几个验证规则,可以直接使用,包括 require(字段必须)、email(验证邮箱格式)、url(验证URL的格式)、currency(货币)、number(数字)

3.错误提示(必须):设置验证失败的提示信息

4.验证条件(可选):包含三种选择

  • self::EXISTS_VALIDATE 或者0 存在字段就验证(默认)
  • self::MUST_VALIDATE 或者1 必须验证
  • self::VALUE_VALIDATE或者2 值不为空的时候验证

5.附加规则(可选):配置验证规则一起使用,有一些的规则类型

规则 说明
regex 正则验证,定义的验证规则是一个正则表达式(默认)
function 函数验证,定义的验证规则是一个函数名
callback 方法验证,定义的验证规则是当前模型类的一个方法
confirm 验证表单中的两个字段是否相同,定义的验证规则是一个字段名
equal 验证是否等于某个值,该值由前面的验证规则定义
notequal 验证是否不等于某个值,该值由前面的验证规则定义(3.1.2版本新增)
in 验证是否在某个范围内,定义的验证规则可以是一个数组或者逗号分割的字符串
notin 验证是否不在某个范围内,定义的验证规则可以是一个数组或者逗号分割的字符串(3.1.2版本新增)
length 验证长度,定义的验证规则可以是一个数字(表示固定长度)或者数字范围(例如3,12 表示长度从3到12的范围)
between 验证范围,定义的验证规则表示范围,可以使用字符串或者数组,例如1,31或者array(1,31)
notbetween 验证不在某个范围,定义的验证规则表示范围,可以使用字符串或者数组(3.1.2版本新增)
expire 验证是否在有效期,定义的验证规则表示时间范围,可以到时间,例如可以使用 2012-1-15,2013-1-15 表示当前提交有效期在2012-1-15到2013-1-15之间,也可以使用时间戳定义
ip_allow 验证IP是否允许,定义的验证规则表示允许的IP地址列表,用逗号分隔,例如201.12.2.5,201.12.2.6
ip_deny 验证IP是否禁止,定义的验证规则表示禁止的ip地址列表,用逗号分隔,例如201.12.2.5,201.12.2.6
unique 验证是否唯一,系统会根据字段目前的值查询数据库来判断是否存在相同的值,当表单数据中包含主键字段时unique不可用于判断主键字段本身

6.验证时间(可选):确实是在什么情况下验证,系统默认有三种选择

  • self::MODEL_INSERT或者1新增数据时候验证
  • self::MODEL_UPDATE或者2编辑数据时候验证
  • self::MODEL_BOTH或者3全部情况下验证(默认)

 

 

 

 

 

 

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇