kohana 3.3.0
==========
实现数据的校验,相比3.*等版本,移除了数据的过滤
合并回调到rule中
CODE:
{
//待校验数据
$array=array(
'username'=>'afasdfs',
'ps'=>''
);
$validation= new 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 中可以得到校验对象