} } }

    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]);


     未完待续

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