首页 > 新闻动态 >  

新闻动态
NEWS

LotusPhp进修六:Validator 组件的应用

添加时间:2013-5-9 点击量:

趁如今炖肉的呢,抽个空赶紧写一篇,天天忙死。


Validator 组件顾名思义就是表单验证组件,负责查验各类表单输入是否合适规矩。由2个类构成,一个是LtValidator,是专门负责验证的,LtValidatorDtd 是用来定义各类验证规矩和返回提示的


LtValidator 的公共办法除了 init() 初始化的组件外,就一个 validate 办法。


Validator 组件支撑10种验证规矩:


ban
凡是用来验证字符串中不包含指定字符的,例如用户名不克不及包含xxx
输入只支撑正则表达式,须要用//引起来.具体可以参考php手册里的preg_match函数


mask
凡是用来验证字符串中包含指定字符的,例如用户名只能以字母数字开首
输入只支撑正则表达式,须要用//引起来.具体可以参考php手册里的preg_match函数


equal_to
凡是用来验证两个值是否恒等,例如输入的两次暗码是否雷同
输入可所以数字也可所以字符串


max_length
凡是用来验证输入的字符串是否跨越了指定长度,例如用户名最多只能8个字母
输入只能是数字


min_length
凡是用来验证输入的字符串是否少于指定长度,例如用户名起码4个字母
输入只能是数字


max_value
凡是用来验证输入的数值是否大于指定的值,例如春秋最大为99岁
输入只能是数字


min_value
凡是用来验证输入的数值是否小于指定的值,例如春秋最小为10岁
输入只能是数字


max_ed
凡是用来验证选择的最多个数是否大于指定的值,例如最多只能选3个
输入只能是数字


min_ed
凡是用来验证选择的起码个数是否小于指定的值,例如起码只能选1个
输入只能是数字


required
凡是用来验证该验证选项是否为必填,例如用户名不克不及为空
输入只能是布尔类型,默认是false


Validator 支撑用设备文件来定义错误信息,若是你没有定义默认的错误信息,那经由过程 LtValidatorDtd 也可以来定义验证错误信息,好了,说的估计有点晕头转向了,还是看例子斗劲给力。


先定义设备文件,validator.conf.php


文件内容如下:



<?php

¥config[validator.error_messages] = array(ban => %s 内容中含有禁用词,
mask => %s 不合适验证规范,
max_length => %s 超出最大字符数 %s,
min_length => %s 小于最小字符数 %s,
max_value => %s 大于最大值 %s,
min_value => %s 小于了最小值 %s,
max_ed => %s 选项过多,
min_ed => %s 选项过少,
required => %s 为空,
equal_to => %s 不便是 %s,
);


上方的设备文件你可以按照本身的验证内容进行更改。总之定义10个类型的失足显示语句就行。


定义完了设备文件,就须要懂得下 Validator 的验证规矩


我给出一个我们验证用户注册的常用例子




¥this
->dtds[Title]=new LtValidatorDtd(用户名称, array(max_length => 20,required => true));
¥this->dtds[Pwd]=new LtValidatorDtd(用户暗码, array(max_length => 20, required => true));
¥this->dtds[Pwd2]=new LtValidatorDtd(反复用户暗码, array(equal_to =>¥this->context->post(Pwd),required => true));
¥this->dtds[Roles]=new LtValidatorDtd(用户角色, array(min_ed =>1));


上方的语句是在LotusPhp MVC模式下的运行典范,若是不启用 LotusPhp MVC模式 ,那就是下面如许的写法了:



¥dtd[username] = new LtValidatorDtd(用户名, 
       arraymax_length => 16, min_length => 4, required => true
       arraymax_length => %s最多只能有%s个字符,
min_length => %s起码必须有%s个字符,
required => %s不克不及为空
) );

¥dtd
[password] = new LtValidatorDtd(暗码,
array
max_length => 20,
min_length => 3,
required => true

array
max_length => %s最多只能有%s个字符,
min_length => %s起码必须有%s个字符,
required => %s不克不及为空
) );

¥dtd
[password_confirm] = new LtValidatorDtd(验证暗码,
array
equal_to => ¥_POST[password]

array
equal_to => 两次输入的暗码不一致
) );

¥dtd[email] = new LtValidatorDtd(Email,
array
required => true
mask => /^(\w)+(\.\w+)@(\w)+((\.\w+)+)¥/,

array
required => %s不克不及为空,
mask => %s 格局不正确
) );


不运行 LotusPhp的 MVC 模式,不是我们讲的重点,稍带提示下。
看过上方的两个定义验证规矩的典范,根蒂根基上多半人能看出来验证规矩的定义办法



¥dtd[表单名称] = new LtValidatorDtd(表单名称表述, 

array
验证类别1 => 验证类此外值1,
验证类别2 => 验证类此外值2,
...

array
验证类别1 => 失足提示语句1,
验证类别2 => 失足提示语句2,
...
) );


若是定义了设备文件,并且不筹办定义失足提示语句,而是用默认的失足提示语句,第二个数据可认为空



¥dtd[表单名称] = new LtValidatorDtd(表单名称表述, 

array
验证类别1 => 验证类此外值1,
验证类别2 => 验证类此外值2,
...
));


就相当于这个样子了
若是是在LotusPhp MVC模式下,只须要在 __construct() 或者 afterConstruct() 办法里定义验证规矩就可以了,框架会主动验证,若是验证失败,会返回3个选项



// 仿照HTTP状况码来定义法度运行状况

¥this->code = 407;
// LotusPhp 返回的提示题目
¥this->message = Invalid input;
// 返回的错误数组
¥this->data[error_messages] = ¥validateResult[error_messages];


今朝 LotusPhp MVC 模式下不会直接回显错误,都须要在模板上来定义。而我是按照返回的 code 来定义应用的模板,若是是407,直接定义模板文件为错误显示文件,然后定义上一页的链接,可以返回从头输入,给大师截个图,是我的项目中自定义的错误视图


没有办法,人太懒了,法度表单验证这里做的挺好,前台还是后台都验证的滴水不漏,懒的改代码了,就用RBAC的错误提示庖代下吧,就是给个思路,大师都可以有本身的处理惩罚体式格式。


若是不是用的 Lotusp 的 MVC 模式,那定义完了验证规矩后还须要有一步



// 过滤下表单,这一步可以省
¥userName
= addslashes¥_POST[userName]);
¥password = addslashes¥_POST[password]);
¥passwordConfirm = addslashes¥_POST[passwordConfirm]);
¥email = addslashes¥_POST[email]);

// 定义
LtValidator ,因为不加载设备文件,所以init可以不调用
//
¥result 是返回错误提示的数组,若是有错误,¥result天然不为空,全部验证完后,可以按照返回的数组进行格局化回显到显示器上
¥validator = new LtValidator;
¥result = array();
¥result[username] = ¥validator->validate(¥userName¥dtd[username]);
¥result[password] = ¥validator->validate(¥password¥dtd[password]);
¥result[passwordConfirm] = ¥validator->validate(¥passwordConfirm¥dtd[password_confirm]);
¥result[email] = ¥validator->validate(¥email¥dtd[email]);


 未完待续

容易发怒的意思就是: 别人做了蠢事, 然后我们代替他们, 表现出笨蛋的样子。—— 蔡康永
分享到: