• LotusPhp学习六:Validator 组件的使用


    趁现在炖肉的呢,抽个空赶紧写一篇,每天忙死。

    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_selected
    通常用来验证选择的最多个数是否大于指定的值,例如最多只能选3个
    输入只能是数字

    min_selected
    通常用来验证选择的最少个数是否小于指定的值,例如最少只能选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_selected' => '%s 选项过多',
                            'min_selected' => '%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" =>$_POST['Pwd'],"required" => true)); $this->dtds['Roles']=new LtValidatorDtd("用户角色", array("min_selected" =>1));

    上面的语句是在LotusPhp MVC模式下的运行范例,如果不启用 LotusPhp MVC模式 ,那就是下面这样的写法了:

    $dtd['username'] = new LtValidatorDtd("用户名", 
           array("max_length" => 16, "min_length" => 4, "required" => true),
           array( "max_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']);

     未完待续

  • 相关阅读:
    SQL Server数据库文件存储目录转移
    窗口管理器 dwm安装
    arch linux 安装
    如何在windows 2003(虚拟主机)上面部署MVC3
    .NET接入微信支付(一)JS API接入 V3
    MongoDB部署实战(一)MongoDB在windows平台分片集群部署
    .NET接入UnionPay银联支付(一)手机wap支付
    cas4.2.7 集群服务搭建
    JAVA计算整数的位数
    JAVA求解质因数
  • 原文地址:https://www.cnblogs.com/iuyes/p/3064690.html
Copyright © 2020-2023  润新知