Kohana 的 Validate 校验数组

kohana 3.3.0

Validation
==========
实现数据的校验,相比3.*等版本,移除了数据的过滤
合并回调到rule中
CODE:
public function action_index()
{
    //待校验数据
    $array=array(
        'username'=>'afasdfs',
        'ps'=>''
    );
    $validationnew Validation($array);
    //单个label
    $validation->label('username', 'USERRRRR');
    //多个label ORM中规则
    $validation->labels(array(
        'ps'=>'PSSSSS'
    ));
    //单个rule
    //参数说明:
    //    1.字段
    //    2.校验规则
    //        not_empty Valid类中方法或其他函数
    //        array($this,'function') 第一个为类,第二个为方法
    //    3.调用该方法的参数列表,可用代替值为bind的值,已定义有
    //        :validation 当前校验类
    //        :field 当前处理字段
    //        :value 当前处理字段的值
    //        :data 整个校验数据

    $validation->rule('ps', 'not_empty');
    //多个rule
    $validation->rule('username', 'not_empty')
               ->rule('username', 'min_length', array(':value', 4))
               ->rule('username',array($this,'hic'),array(':validation',':field'));
    $validation->rules('username', array(
                    array('max_length', array(':value', 5)),
                ));
    if(!$validation->check()){
        //校验失败获取错误
        //参数为消息文件名
        //如果要用Valid类消息,可以在消息文件合并vaild的消息在返回(即合并消息数组)

        print_r($validation->errors('test'));
    }
    
}
public function hic(Validation $v,$vl){
    //$v->error($vl,"bad");
}


//以下为旧版本的使用....

 

由于校验类数组的这个类没有相关的文档 ,做个笔记,提防以后忘记

class Controller_Test extends Controller_Smarty{

    public function action_index(){

        $_GET=array(

            'a'=>'aaaaa ',

            'b'=>' '

        );

        $validate = Validate::factory($_GET);

        //@todo 这里开始

        //通过标签赋值显示字段

        //参数:字段,显示名称

        $validate->label('a', 'A属性');

        $validate->label('b', 'b属性');

        //字段设置为true的时候为全部字段

        //通过回调函数验证字段合法性

        //参数:字段 ,回调函数,额外参数

        $callbacks=array(

            array($this, 'a'),

        );

        $validate->callbacks('a', $callbacks);

        $validate->callback('a', array($this, 'a1'),array('pas1','pas2')); // function a($validate,$field,$params)

        $validate->callback('b', array($this, 'b'),array('pas1')); // function a1($validate,$field,$params)

        $rule= array(

            'min_length' => array(4),

            'max_length' => array(32),

            'regex' => array('/^[-\pL\pN_.]++$/uD'),

        );

        //通过规则验证字段合法性

        //规则函数的参数通过数组列表形式传递

        //参数:字段,规则数组

        $validate->rules('a',$rule);//使用规则,规则消息在validate

        //通过规则验证

        //参数:字段,规则函数,参数

        $validate->rule(true,'not_empty',null);//过滤

        //过滤

        //参数:字段,静态方法或函数,额外参数

        $validate->filter(true, 'trim');//过滤

        //静态方法或函数: static function fa($value,$params) 指定字段值等于返回值

        $validate->filter('a', get_class($this).'::fa',array('filterparams'));

        if($validate->check()){

            print_r($validate['a']);

            print_r($validate['b']);

        }else{

            //获取错误

            //参数:消息文件名,是否翻译

            $msg=$validate->errors('a');

            print_r($msg);

            $this->end();

        }

    }

    public function a1($vaildate,$filed,$par){

        //错误添加

        //参数:字段,消息文件中的字段,传入到消息文件的一维数组

        $vaildate->error('a', 'invalid',$par);//

    }

    public function a($vaildate,$filed,$par){

    }

    public function b($vaildate,$filed,$par){

    }

    public static function fa($value,$params){

        return '000000000';

    }

}

 

ORM中调用校验配置以下数组,最后调用check方法

protected $_rules = array();

protected $_callbacks = array();

protected $_filters = array();

protected $_labels = array();

 

检测失败在属性: validate 中可以得到校验对象

posted @ 2011-08-09 12:05  liushan  阅读(1528)  评论(0编辑  收藏  举报