网站

ThinkPHP 自动验证create 案例

分类 :php  thinkphp     2017-10-12 人气:

#自动验证
#没有语法,由数据对象创建方法create实现自动验证,那我们写验证规则。
#在父模型中存在一个成员属性叫_validate,用于保证难规则,将该属性复制到自定义模型中去定义规则。
#父模型在ThinkPHP->Library->Think->Model.class.php
#放到自定义模型中:如当前是Admin模型,则放在Admin->Model->控制器model.class.php中

详细的验证规则都请看帮助文档。看不懂帮助文档验证规则的意思的,可以看案例代码中的注释,非常详细。

自定义验证放置的文件DeptModel.class.php

<?php
	
	#声明命名空间
	namespace Admin\Model;
	#引入父类模型
	use Think\Model;
	#声明模型并且继承父类模型
	class DeptModel extends Model
	{		
		 
		#验证规则的定义是统一的规则,定义格式为 
		#array(验证字段1,验证规则,错误提示,[验证条件,附加规则,验证时间]),.....array(验证字段1...重复前面的可写多条
		
		#必选参数
			#验证字段:表单中每一个表单项的name值
			#验证规则:就是针对验证字段的要求格式的限制,常见规则有:require 字段必须、email 邮箱、url 地址、currency 货币、number数字
			#错误提示:在难不合理的时候给用户提示信息。
			
		#可选参数:
			#验证条件:0表示字段存在的就验证(默认),1表示必须验证,2表示字段不为空的时候验证
			#附加规则:结合验证规则,两者配合起来使用。具体支持的方法,可以参考手册“自动验证”
			#验证时间:1表示新增数据时验证,2表示编辑时验证,3表示全部情况下都验证(默认)
			
		
		// 自动验证定义
		#protected $_validate        =   array();   #默认复制过来就是这样
		protected $_validate        =   array(
			#第一个字段验证
			array('name','require','部门名称不能为空'),
			array('name','','部门名称已经存在',0,'unique'), #验证规则无要求则留空  unique是附加规则里面的,作用是判断数据库中是否已存在该内容
			
			#array('sort','number','必须是数字'),  #这是使用系统自己的方式验证,为了案例,我们采用自己的函数验证
			array('sort','is_numeric','排序必须是数字',0,'function'), #我们使用函数验证,则第二个参数要求是函数名
		); 
	}
	
?>

控制器函数使用验证DeptController.class.php

函数名是add
#处理表单提交
				#写入数据
				#$model = M('Dept');
				#因为我们加入了自定义验证,自定义验证放在了自定义模型中,所以需要用D函数
				$model = D('Dept');
				#数据对象创建
				#create:如果模板中name表单名与数据表中字段不匹配,则在创建数据对象的时候会被过滤掉。
				$data = $model->create(); #不传递参数则接收post数据
				#当上面执行create时,验证的结果就已经返回到$data中,验证失败返回假,否则返回真
				#下面如果$data为假则提示用户验证失败
				if(!$data)
				{
					#提示用户验证失败
					#输出用户提示信息,用$model->getError()
					$this->error($model->getError()); 
					#防止后面的断续执行,所以加上exit
					exit;
				}
				$result = $model -> add(); #add里面不放传参,则代表运行我们创建的对象  #其它的CURD都不用传参

add.html中的值

add.html表单中的name包含了namesort。所以上面验证了这两个。

批量验证

DeptModel.class.php中开启

class DeptModel extends Model
	{
		#开启批量验证
		#开启批量验证指一次性验证所有字段,并返回所有错误信息
		#将protected $patchValidate 设置为 true即可
		protected $patchValidate = true;

返回值

批量验证返回的是一个数组,所以输出错误时不能像上面那样输出,貌似不如单独验证好用一些。


继续阅读