ThinkPHP 3.2.2中 的自动完成功能!
在处理表单的时候,如果表单的字段量比较大的时候,我们处理起来会比较费劲。这时候,ThinkPHP的自动完成功能可以很好的解决这个问题。
这里介绍的是ThinkPHP中的静态验证:
静态定义方式因为必须定义模型类,所以只能用D函数实例化模型
这个表是用来测试用的。
我们需要一个表单:
<form action="{:U('Tuser/insert')}" name="tuserForm" method="post"> <table> <tr> <td>用户名:</td> <td><input type="text" name="username" value="" /></td> </tr> <tr> <td>邮箱:</td> <td><input type="text" name="email" value="" /></td> </tr> <tr> <td>内容:</td> <td><textarea name="content" id=""></textarea></td> </tr> <tr> <td>验证码:</td> <td><input type="text" name="verify" value="" /><img src="{:U('Index/verify')}" alt="" onclick="this.src='{:U("Index/verify")}'+'?ran='+Math.random()" /></td> </tr> <tr> <td></td> <td><input type="submit" value="添 加" /></td> </tr> </table> </form>
这个页面中的表单!
下面的部分是关键,就是定义一个模型
namespace Home\Model; use Think\Model; class TestUserModel extends Model { /*自动完成*/ protected $_validate = array( array('username','require','请输入用户名',1) ,array('username','/^[a-zA-Z]\w{3,19}$/','字母开头,4-20位数字字母或下划线',1,'regex',3) ,array('email','require','请输入邮箱',1) ,array('email','email','邮箱格式错误',1) ,array('email','','邮箱已经存在',0,'unique',1) ,array('content','require','请输入内容',1) ,array('content','checkContent','发布内容最少5个,最多255个字符',1,'callback',1) ,array('verify','require','请输入验证码',1) ,array('verify','checkVerify','验证码错误',0,'callback',1) ); protected $_auto = array( array('create_time','time',1,'function') ); protected function checkContent() { $content = I("content"); if(strlen($content) <5 || strlen($content) >255) { return false; } else { return true; } } protected function checkVerify() { $code = I("verify"); $verify = new \Think\Verify(); return $verify->check($code, 1); } }
详细解释一下这里的定义:
$_validate=array(
array(验证字段1,验证规则,错误提示,[验证条件,附加规则,验证时间])
,array(验证字段2,验证规则,错误提示,[验证条件,附加规则,验证时间])
);
这是模型中必须要定义的一个数组,这个数组再定义各个表单中的字段规则:
数组中的“子数组”的元素:
①验证字段(必须):定义要操作的字段名,即表单中name="?"的?号部分
②验证规则(必须):
要进行验证的规则,需要结合附加规则,如果在使用正则验证的附加规则情况下,
系统还内置了一些常用正则验证的规则,可以直接作为验证规则使用,
系统内置的验证规则包括:require 字段必须、email 邮箱、url URL地址、currency 货币、number 数字。除此之外的规则,用户自己定义。
③提示信息(必须):
用于验证失败后的提示信息定义
以上①②③部分是必须定义的部分:即验证字段、验证规则、提示信息
系统提供的内置验证规则往往不能满足所有需要,这时候我们就要定义附加规则:
④验证条件:
- self::EXISTS_VALIDATE 或者 0 存在字段就验证(默认)
- self::MUST_VALIDATE 或者 1 必须验证
- self::VALUE_VALIDATE 或者 2 值不为空的时候验证
⑤附加规则:
规则 | 说明 |
---|---|
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不可用于判断主键字段本身 |
⑥验证时间:
- self::MODEL_INSERT 或者 1新增数据时候验证
- self::MODEL_UPDATE 或者 2编辑数据时候验证
- self::MODEL_BOTH 或者 3全部情况下验证(默认)
那么在控制器中应该如何使用这个模型类呢namespace Home\Controller;
use Think\Controller; class TuserController extends Controller { public function insert() { if(!IS_POST) $this->error("页面不存在"); $tuser = D("TestUser"); if (!$tuser->create()){ // 如果创建失败 表示验证没有通过 输出错误提示信息 header("Content-Type:text/html;Charset=UTF-8"); exit($tuser->getError()); }else{ // 验证通过 可以进行其他数据操作 if($tuser->add()) {
} else {
} } } }
这样一个表单的自动完成功能就实现了。ThinkPHP 3.2 过后的框架设计我觉得还是很值得学习的。
---- 始终相信这句:
----“做每天该做的事,不计结果!”
---- 因爲對於編程還只是新手,對很多知識掌握的不牢靠,歡迎大家批評指正~~|=-=|~~
----“做每天该做的事,不计结果!”
---- 因爲對於編程還只是新手,對很多知識掌握的不牢靠,歡迎大家批評指正~~|=-=|~~