博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
手把手写php框架中三大“自动功能”
阅读量:5298 次
发布时间:2019-06-14

本文共 2564 字,大约阅读时间需要 8 分钟。

 

    在很多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 }

 

 

 

 

转载于:https://www.cnblogs.com/eryuefei/p/3321719.html

你可能感兴趣的文章
登陆界面的记住密码
查看>>
Hadoop的体系结构之HDFS的体系结构
查看>>
java基础(一):我对java的三个环境变量的简单理解和配置
查看>>
arcgis api 4.x for js 结合 Echarts4 实现散点图效果(附源码下载)
查看>>
YTU 2734: 国家排序
查看>>
YTU 2625: B 构造函数和析构函数
查看>>
Notepad++ 16进制编辑功能
查看>>
Caffe: Cannot create Cublas handle. Cublas won't be available
查看>>
Linux 下 LXD 容器搭建 Hadoop 集群
查看>>
mysql describe
查看>>
Hello博客园
查看>>
apache自带压力测试工具ab的使用及解析
查看>>
Android基础入门教程——8.1.2 Android中的13种Drawable
查看>>
JQuery的ajax
查看>>
hdu 1159 Common Subsequence(最长公共子序列)
查看>>
realloc使用详解
查看>>
C语言作业3
查看>>
cxGrid主从表删除从表记录的困惑
查看>>
【Leetcode 167】Two Sum II - Input array is sorted
查看>>
.Net Core中的通用主机(二)——托管服务
查看>>