在很多php框架中都有自动过滤,自动填充,自动验证等三大自动功能,用来对POST表单传过来的数据进行加工,以便能够更加规范的导入数据库。这一功能在添加商品,添加商品分类中有很大的用处。比如thinkphp框架就有自动过滤,自动填充,和自动验证功能。
今天我们就以MVC的思维方式编写三大自动功能。
(1) 首先,来写比较简单的自动过滤功能。假如从post表单中传递过来的 数据我么定义为数组$array.即$array=$_POST
1 db = mysql::getIns();17 }18 }19 20 //完成表单的自动过滤21 public function _facade($array=array()){22 $data=array(); 23 foreach($array as $k=>$v){24 25 if(in_array($k,$this->fields)){26 27 $data[$k]=$v;28 }29 }30 return $data;31 32 } (2)完成自动过滤有我们可以得到一个没有违法字段的$data数组。接下来需要完成的是自动填充
public function _autoFill($data){foreach($this->_auto as $k=>$v){ if(array_key_exists($v[0],$data){ switch($v[1]){ case 'value': $data[$v[0]]=$v[2]; break; case 'function': $data[$v[0]]=call_user_func($v[2]); $break; } } } return $data;}
(3).也是最难的,也就是完成自动验证。
首先要写一个验证函数,然后进行自动验证。
1 //先写一个检测函数 2 protected function check($value,$rule='',$parm=''){ 3 4 switch($rule){ 5 case 'require': 6 return !empty($value); 7 case 'number': 8 return is_numeric($value); 9 case 'in':10 return in_array($value,explode(',',$parm);11 case 'between':12 list($min,$max)=explode(',',$parm);13 return $value>=$min&&$value<=$max;14 case 'length':15 list($min,$max)=explode(',',$parm);16 return strlen($value)>=$min&&strlen($value);17 default:18 return false;19 }20 }
然后我们根据以上的验证函数来对二维数组进行验证。
1 public function _validate($data){ 2 if(empty($_valid)){ 3 return true; 4 } 5 $this->error=array(); 6 foreach($_valid as $k=>$v){ 7 switch($v[1]){ 8 case 1: 9 if(!isset($v[0])){10 $this->error=$v[2];11 return false;12 }13 if(!$this->check($v[0],$v[3])){14 $this->error=$v[2];15 return false;16 }17 break;18 case 0:19 if(isset($v[0])){20 21 if(!$this->check($v[0],$v[3],$v[4])){22 this->error=$v[2];23 return false;24 }25 }26 break;27 case 2:28 if(isset($v[0]))&& !empty($v[0]){29 if(!this->check($v[0],$v[3],$v[4])){30 $this->error=$v[2];31 return false;32 }33 }34 35 break;36 }37 38 }39 40 return true;41 }