首页 > php教程 > php手册 > 正文

TP3.2的简单数据验证类

php中文网
发布: 2016-06-07 11:34:54
原创
1430人浏览过

用于处理Model进入数据的验证
很多时候,我们在Model中处理数据的时候会一次传入很多参数,这时候可能需要对参数进行判断,是不是少参数了,参数的格式是否正确,如果每次都一大堆if判断的话会很麻烦,以前用过CI,它里面有对form表单提交的数据进行验证的类,然后按照我的习惯写了这个方法。

Validator.class.php<?php <br /><br> /**<br>  * 数据验证类<br>  * <br>  * @author Coeus <r.anerg><br>  */<br><br> namespace Lib\Util;<br><br> class Validator {<br><br>     private $_vals;<br>     private $_rules;<br>     private $_errs;<br>     private $_error_code;<br><br>     public function set_rule($val, $rule, $err_code = -999) {<br>         $this-&gt;_vals[]  = $val;<br>         $this-&gt;_rules[] = $rule;<br>         $this-&gt;_errs[]  = $err_code;<br>         return $this;<br>     }<br><br>     public function ErrorCode() {<br>         return $this-&gt;_error_code;<br>     }<br><br>     private function reset() {<br>         $this-&gt;_vals       = array();<br>         $this-&gt;_rules      = array();<br>         $this-&gt;_errs       = array();<br>     }<br><br>     public function run() {<br>         foreach ($this-&gt;_rules as $index =&gt; $rule) {<br>             $_errs   = $this-&gt;_errs[$index];<br>             $errs    = explode('|', $_errs);<br>             $methods = explode('|', $rule);<br>             if (!in_array('required', $methods) &amp;&amp; ($this-&gt;_vals[$index] === false || $this-&gt;_vals[$index] === '' || $this-&gt;_vals[$index] === null))<br>                 continue;<br>             foreach ($methods as $k =&gt; $method) {<br>                 if (preg_match('/(.*?)\[(.*)\]/', $rule, $match)) {<br>                     $method = 'rule_' . $match[1];<br>                     $param  = $match[2];<br>                     if (method_exists($this, $method) &amp;&amp; $this-&gt;$method($index, $param) === false) {<br>                         $this-&gt;_error_code = isset($errs[$k]) ? $errs[$k] : -999;<br>                         $this-&gt;reset();<br>                         return false;<br>                     }<br>                 } else {<br>                     $method = 'rule_' . $method;<br>                     if (method_exists($this, $method) &amp;&amp; $this-&gt;$method($index) === false) {<br>                         $this-&gt;_error_code = isset($errs[$k]) ? $errs[$k] : -999;<br>                         $this-&gt;reset();<br>                         return false;<br>                     }<br>                 }<br>             }<br>         }<br>         $this-&gt;reset();<br>         return true;<br>     }<br><br>     private function rule_trim($index) {<br>         $this-&gt;_vals[$index] = trim($this-&gt;_vals[$index]);<br>     }<br><br>     private function rule_required($index) {<br>         return $this-&gt;_vals[$index] !== '' &amp;&amp; $this-&gt;_vals[$index] !== false &amp;&amp; $this-&gt;_vals[$index] !== null ? true : false;<br>     }<br><br>     private function rule_regex_match($index, $regex) {<br>         return (bool) preg_match($regex, $this-&gt;_vals[$index]);<br>     }<br><br>     private function rule_matches($index, $match_val) {<br>         return (bool) $this-&gt;_vals[$index] === $match_val;<br>     }<br><br>     private function rule_integer($index) {<br>         return (bool) preg_match('/^[\-+]?[0-9]+$/', $this-&gt;_vals[$index]);<br>     }<br><br>     private function rule_mobile($index) {<br>         return (bool) preg_match('/^1[3|4|5|7|8]\d{9}$/', $this-&gt;_vals[$index]);<br>     }<br>     <br>     private function rule_min_len($index, $val) {<br>         return strlen($this-&gt;_vals[$index]) &gt;= $val;<br>     }<br>     private function rule_max_len($index, $val) {<br>         return strlen($this-&gt;_vals[$index])      }<br><br> }</r.anerg>一般来说,我不喜欢把其他东西放进ThinkPHP文件夹下,所以有一个Lib文件夹,在Application文件夹下。然后配置config.php文件,修改如下'AUTOLOAD_NAMESPACE'    =&gt; array('Lib' =&gt; APP_PATH . 'Lib'), //应用类库这样就可以正常加载了。

另外,验证的配置文件我是单独放的,所以我的function.php文件里多了一个函数/**<br>  * 加载扩展的配置参数<br>  * @param type $file_name<br>  * @param type $is_common<br>  */<br> function load_ext_config($file_name, $is_common = true) {<br>     $file_path = $is_common ? COMMON_PATH . 'Conf/' . $file_name . '.php' : MODULE_PATH . 'Conf/' . $file_name;<br>     if (is_file($file_path)) {<br>         $_config[$file_name] = load_config($file_path);<br>         C($_config);<br>     }<br> }在Model中,具体使用示例如下:    public function __construct() {<br>         load_ext_config('Valid');<br>     }<br><br>     /**<br>      * 创建订单<br>      * @param type $params<br>      * @return boolean<br>      */<br>     public function create($params) {<br>         if ($this-&gt;_valid($params, __FUNCTION__) === false) {<br>             return false;<br>         }<br>         .............<br>     }<br>     /**<br>      * 字段格式及内容验证<br>      * @param type $params<br>      * @param type $method<br>      * @return boolean<br>      */<br>     private function _valid($params, $method) {<br>         $Rules     = C("VALID.ORDER");<br>         $Validator = new \Lib\Util\Validator();<br>         foreach ($Rules[$method] as $k =&gt; $v) {<br>             if ($Validator-&gt;set_rule($params[$k], $v['rule'], $v['err'])-&gt;run() === false) {<br>                 $this-&gt;setErr($Validator-&gt;ErrorCode());<br>                 return false;<br>             }<br>         }<br>         return true;<br>     }数据验证的配置文件内容:<?php <br /><br> return array(<br>     'ORDER' =&gt; array(<br>         'create'         =&gt; array(<br>             'order_time'     =&gt; array(<br>                 'rule' =&gt; 'integer',<br>                 'err'  =&gt; '-902001'<br>             ),<br>             'order_fee'      =&gt; array(<br>                 'rule' =&gt; 'required|integer',<br>                 'err'  =&gt; '-903002|-903001'<br>             ),<br>             'order_cost'     =&gt; array(<br>                 'rule' =&gt; 'required|integer',<br>                 'err'  =&gt; '-904002|-904001'<br>             ),<br>             'order_status'   =&gt; array(<br>                 'rule' =&gt; 'integer',<br>                 'err'  =&gt; '-905001'<br>             ),<br>             'order_channel'  =&gt; array(<br>                 'rule' =&gt; 'required|integer',<br>                 'err'  =&gt; '-906002|-906001'<br>             ),<br>             'order_discount' =&gt; array(<br>                 'rule' =&gt; 'integer',<br>                 'err'  =&gt; '-907001'<br>             ),<br>             'uid'            =&gt; array(<br>                 'rule' =&gt; 'required|integer',<br>                 'err'  =&gt; '-106002|-106001'<br>             ),<br>         ),

AD:真正免费,域名+虚机+企业邮箱=0元

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号