基於webmozart assert封裝的驗證,利用反射簡化了原有的呼叫過程,增加了語言包,自定義驗證規則
//驗證規則
$rule = [
//字串方式 '驗證的字段'=>'規則1|規則2:引數1|規則3:引數1:引數2'
'category_num' =>'notempty|eq:10|lengthbetween:1:3',
//陣列方式
'category_name' => [ //驗證的字段
'notempty',//規則1
'eq' => [ //規則2
10, //引數1
],'lengthbetween' => [ //規則3
1, //引數1
3, //引數2
],],
];//自定義message,如果沒有自定義,就預設讀語言包的
$msg =[
'category_num.notempty'=>'必填'
];//呼叫驗證
(new validator())->v($this->in, $rule);
複製**
語言包檔案是lang/zh-cn.php(框架自帶或者任意配置檔案)
'notempty' => '請填寫%s', //%s代表替換字段
'eq' => '', 如果預設訊息為空,可以自定義新增
複製**
在ext目錄下新建或者在已有的trait裡新增方法方法名必須是唯一的,不能跟現有的重複,方法名即驗證規則
trait test
}}複製**
已有的驗證規則可以檢視github.com/webmozart/a…上面的
是指在php執行狀態中,擴充套件分析php程式,匯出或提取出關於類、方法、屬性、引數等的詳細資訊,包括注釋。這種動態獲取的資訊以及動態呼叫物件的方法的功能稱為反射api。 反射是操縱物件導向范型中元模型的api,其功能十分強大,可幫助我們構建複雜,可擴充套件的應用
其用途如:自動載入外掛程式,自動生成文件,甚至可用來擴充php語言。
本人比較懶就直接貼**了、、、、、、、
.
+-- validator.class.php
+-- validatorext.class.php
+-- ext
| +-- test.class.php
| +-- header.html
複製**
<?php
namespace restfulapi\common\validator;
use webmozart\assert\assert;
/** * 驗證
* class validator
* @package restfulapi\common\validator
* @author matao
* @since 2018-08-01
*/class validator
/*** 格式化rule
* @param $rules
* @return array
* @author matao
* @since 2018-08-01
*/private function formatrule($rules)
else
}$rule[$key] = $currentrule;
} else
}return
$rule;
}/**
* data轉換
* @param $datas
* @param $rules
* @return array
* @author matao
* @since 2018-08-07
*/private function conversion($datas, $rules)
/*** 執行驗證
* @param $data
* @param $rule
* @param array $msg
* @throws \reflectionexception
* @author matao
* @since 2018-08-01
*/private function validator($data, $rule, $msg = )
foreach ($rule[$key] as $k => $value) else
$message = '';
//如果有自定義message就使用
if (!empty($msg["."])) ."];
} elseif (l($method))
$param = $message ?: ''; //$param是該方法的引數[$val1,$val2]
//呼叫具體的方法
$this->scheduler($method, $param);
unset($param);}}
}/**
* 排程
* @param $method
* @param $param
* @throws \reflectionexception
* @author matao
* @since 2018-08-01
*/private function scheduler($method, $param)
}/**
* 反射
* @param $class
* @param $method
* @param $param
* @return bool
* @throws \reflectionexception
* @author matao
* @since 2018-08-01
*/public function reflection($class, $method, $param)
return
false;
}}複製**
<?php
namespace restfulapi\common\validator;
//自定義驗證,方法不能跟已有的重複
use restfulapi\common\validator\ext\mysqlvalidator;
use restfulapi\common\validator\ext\test;
class validatorext
}複製**
<?php
namespace restfulapi\common\validator\ext;
trait test
}}複製**
set_exception_handler(function (\invalidargumentexception $exception) );
複製**
利用反射機制呼叫私有方法
步驟1 獲取到當前執行緒的類載入器 classloader classloader thread.currentthread getcontextclassloader 步驟2 用類載入器獲取的class物件 class clazz classloader.loadclass com.wxw.tes...
利用反射動態呼叫類成員
使用反射動態呼叫類成員,需要type類的乙個方法 invokemember。對該方法的宣告如下 摘抄於msdn public object invokemember string name,bindingflags invokeattr,binder binder,object target,obj...
C 利用反射呼叫類下的方法
1.主窗體下的 namespace testreflection private void comboboxedit1 selectedindexchanged object sender,eventargs e 反射呼叫類中的方法 private void testmethod string me...