Heim > Artikel > Backend-Entwicklung > Spezifische Verwendung des ThinkPHP5-Validators
Dieser Artikel stellt hauptsächlich die spezifische Verwendung des ThinkPHP5-Validators vor, der einen gewissen Referenzwert hat. Jetzt kann ich ihn mit allen teilen, die ihn brauchen.
Vorwort:
Bei der API-Entwicklung akzeptieren wir Parameter vom Client. Jeder weiß, dass dieser Parameter nicht vertrauenswürdig ist. Ich kannte den tp5-Validator nur aus früheren Entwicklungen, kannte aber seinen Zweck nicht, da die Überprüfung früherer Entwicklungen häufig auf Modellfeldern basierte. Der Validator eignet sich besser für die API-Entwicklung. Heute werde ich kurz auf die Verwendung des Validators eingehen.
Verzeichnis:
Validator erstellen
Separaten Validator schreiben
Validierung aufrufen
1. Erstellen ein Validator
Zuerst benötigen wir einen Ordner zum Speichern unseres Validators. Wir erstellen einen Ordner auf der gleichen Ebene wie der Controller unter dem Modul und nennen ihn „validate“
Dann können wir den Validator erstellen. Wir müssen nur eine Klasse erstellen und die Validierungsklasse von tp5 erben.
Aber Freunde, die mit objektorientiertem Denken vertraut sind, müssen wissen, dass wir eine Methode benötigen, die von jedem Validator verwendet werden muss, aber den Quellcode von tp5 nicht ändern darf. Wir werden eine weitere Klasse als Basisklasse schreiben. Alle Validatoren erben diese Basisklasse, und dann erbt diese Basisklasse die Validierungsklasse von tp5.
Hier nennen wir es baseValidate
Jetzt erstellen wir einen seriösen Validator. Zum Beispiel:
namespace app\index\validate; use think\Validate; class User extends Validate { protected $rule = [ 'name' => 'require|max:25', 'email' => 'email', ]; }
dann instanziieren Sie es im Controller oder Modell und rufen Sie dann
//虚拟一组数据,实际开发中是接受用户传递的数据 $data = [ 'name'=>'thinkphp', 'email'=>'thinkphp@qq.com' ]; $validate = Loader::validate('User'); if(!$validate->check($data)){ dump($validate->getError()); }Eine solche Validator-Anwendung ist jetzt geschrieben. Mal sehen, ob wir etwas vereinfachen können.
namespace app\home\validate; use think\Exception; use think\Request; use think\Validate; class BaseValidate extends Validate { public function goCheck($data='') { //实例化请求对象 $requestObj=Request::instance(); //如果传入为空则获取请求里的参数 empty($data)&&$data=$requestObj->param(); if ($this->check($data)) { //如果验证通过了 return true; }else{ //如果验证没通过 $error=$this->getError(); //抛出异常 throw new Exception($error); } } }Nachdem die goCheck-Methode gekapselt ist, fragt sich vielleicht jemand, wo die Verifizierungsregel ist?
2. Schreiben Sie einen separaten Validator
Wie ich bereits sagte, wird BaseValidate verwendet, um vererbt zu werden, also haben wir dies für den echten Validator getan Habe nicht angefangen zu schreiben. Die Regeln werden in diesem Validator formuliert. Für ein tieferes Verständnis finden Sie hier ein Beispiel mit benutzerdefinierten Validierungsregeln. Tatsächlich sollten die von tp geschriebenen Verifizierungsregeln ausreichen Nehmen wir als Beispiel die am häufigsten akzeptierten Daten, nämlich die ID. Normalerweise stellt diese ID die ID eines bestimmten Datenelements in unserer Datenbank dar Entwerfen Sie diese ID häufig als vorzeichenlosen, automatisch inkrementierenden Primärschlüssel, der als positive Ganzzahl in die menschliche Sprache übersetzt wird. Wenn der vom Kunden übergebene Parameter dann eine negative Zahl oder eine Dezimalzahl ist, sollte er die Überprüfung nicht bestehen.Zuerst müssen wir unseren Basisvalidator
class IdMustBePositiveInt extends BaseValidateerben und dann Regeln formulieren, um einer festen Mitgliedsvariablen einen Wert zuzuweisen
protected $rule = [ //require是内置规则,而tp5并没有正整数的规则,所以下面这个positiveInt使用自定义的规则 'id' => 'require|positiveInt' ];Wie kann man also die Regeln anpassen? Definieren Sie eine geschützte Methode
//系统会自动传入几个参数 第一个是 要验证的值,第二个是规则,自己可以规定规则内容或者不写,第三个是最初传入的data。其实不只这三个参数,想了解详细的可以看看文档 protected function positiveInt($value, $rule='', $data) { if (is_int(($value+0))&&($value+0)>0) { return true; }else{ return 'id必须为正整数'; } }! ! Hinweis: Wenn das Urteil hier fehlschlägt: Die Rückgabe ist nicht falsch, sondern eine Fehlermeldung.
3. Aufrufverifizierung
Gemäß unserer vorherigen Kapselung besteht der Effekt, den wir erreichen müssen, darin, Parameter zu akzeptieren und zu überprüfen in einem. Wie nennen wir nun die Verifizierung? Hier kommt das tolle Zeug, nehmen wir als Beispiel die IDpublic function test($id) { //在控制器中直接调用写上这行代码就搞定验证了 (new IdMustBePositiveInt)->goCheck(); }
这次只举了id为例子,虽然看上去比直接写独立验证麻烦很多,但是大家仔细想想,这个验证规则其实在很多地方都是一样的,比如密码验证规则,用户名验证规则等,当这个项目写完了。你已经完成了很多验证器。其实在下个项目中还可以继续套用的哦
TP5验证规则使用
①静态调用(使用内置的规则验证单个数据,返回值为布尔值)
// 日期格式验证 Validate::dateFormat('2016-03-09','Y-m-d'); // true // 验证是否有效的日期 Validate::is('2016-06-03','date'); // true // 验证是否有效邮箱地址 Validate::is('thinkphp@qq.com','email'); // true // 验证是否在某个范围 Validate::in('a',['a','b','c']); // true // 验证是否大于某个值 Validate::gt(10,8); // true // 正则验证 Validate::regex(100,'\d+'); // true
②模型验证(在模型中的验证方式)
$User = new User; $result = $User->validate( [ 'name' => 'require|max:25', 'email' => 'email', ], [ 'name.require' => '名称必须', 'name.max' => '名称最多不能超过25个字符', 'email' => '邮箱格式错误', ] )->save($data); if(false === $result){ // 验证失败 输出错误信息 dump($User->getError()); }
③控制器验证(控制器中进行验证)
如果你需要在控制器中进行验证,并且继承了\think\Controller的话,可以调用控制器类提供的validate方法进行验证,如下:
$result = $this->validate( [ 'name' => 'thinkphp', 'email' => 'thinkphp@qq.com', ], [ 'name' => 'require|max:25', 'email' => 'email', ]); if(true !== $result){ // 验证失败 输出错误信息 dump($result); }
控制器中的验证代码可以简化为:
$result = $this->validate($data,'User'); if(true !== $result){ // 验证失败 输出错误信息 dump($result); }
如果要使用场景,可以使用:
$result = $this->validate($data,'User.edit'); if(true !== $result){ // 验证失败 输出错误信息 dump($result); }
在validate方法中还支持做一些前置的操作回调,使用方式如下:
$result = $this->validate($data,'User.edit',[],[$this,'some']); if(true !== $result){ // 验证失败 输出错误信息 dump($result); }
好了,本次tp5验证器的介绍了就写到这里了,希望对大家的学习有所帮助。
相关推荐:
Das obige ist der detaillierte Inhalt vonSpezifische Verwendung des ThinkPHP5-Validators. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!