对POST数据实现自动验证

要实现自动验证,只需在Model类里事先定义好验证的方法,然后在其他类定义好要验证数据的格式,在继承Model就可以使用了


对POST数据要验证的格式 

$this->valid = array(
		array('验证的字段名',0/1/2(验证场景),'报错提示','require/in(某几种情况)/length(范围)/between(某个范围)');
);


具体例子如下:

	protected $_valid = array(
			array('goods_name',1,'必须有商品名','require'),
			array('cat_id',1,'栏目id必须是整型值','number'),
			array('is_new',0,'is_new只能是0或1','in','0,1'),
			array('goods_brief',2,'商品简介就在10到100字符','length','10,100')
	);


Model类里定义的自动验证方法

        /**
	*自动验证
	*@param $data array 已经对POST数据完成自动过滤和自动完成操作的数据
	*@return true/false bool 验证失败返回false 成功返回true
	*/
	public function _validate($data){
		if(empty($this->_valid)){//没有先定义验证格式就调用这个方法,则返回true
			return true;
		}
		$this->error = array();
		foreach ($this->_valid as $k => $v) {
			switch ($v[1]) {
				case 1:
					if(!isset($data[$v[0]]) ){
						$this->error[] = $v[2];
						return false;
					}
					if(!$this->check($data[$v[0]], $v[3])){
						$this->error[] = $v[2];
						return false;
					}
					break;
				case 0:
					if(isset($data[$v[0]])){
						if(!$this->check($data[$v[0]],$v[3],$v[4])){
							$this->error[] = $v[2];
							return false;
						}
					}
					
					break;
				case 2:

					if( isset($data[$v[0]]) && !empty( $data[$v[0]] )  ){
						if(!$this->check($data[$v[0]],$v[3],$v[4])){
							
							$this->error[] = $v[2];
							return false;
						}
					}
				default:
					break;	
				
			}
		}
		return true;
	}

	/**
	*自动验证的规则检查
	*@param $value 找POST数据里验证字段为下标对应的数据
	*@param $rule string 验证规则:require,in,number,length...
	*@param $parm string 要验证的可选参数范围设定
	*@return true/false bool 
	*/
	protected function check($value,$rule='',$parm=''){
		switch ($rule) {
			case 'require':
				return !empty($value);
			case 'number':
				return is_numeric($value);
			case 'in':

				$tmp = explode(',', $parm);
				return in_array($value, $tmp);
			case 'between':
				list($min,$max) = explode(',', $parm);
				return $value >= $min && $value <=$max;
			case 'length':
				list($min,$max) = explode(',', $parm);
				return mb_strlen($value) >= $min && mb_strlen($value) <= $max;
			
			default:
				return false;
		}
	}

	/**
	*存储验证格式里预先定义好的错误信息
	*/
	public function getErr(){
		return $this->error;
	}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值