Cet article présente principalement l'utilisation spécifique du validateur ThinkPHP5, qui a une certaine valeur de référence. Maintenant, je le partage avec tout le monde. Les amis dans le besoin peuvent s'y référer
Avant-propos :
Lorsque nous développons des API, nous accepterons les paramètres du client. Tout le monde sait que ce paramètre n'est pas fiable. Nos développeurs back-end doivent vérifier ce paramètre. Je ne connaissais le validateur tp5 que lors d'un développement précédent, mais je ne connaissais pas son objectif, car la vérification du développement précédent était souvent basée sur des champs de modèle. Le validateur est plus adapté au développement d'API. Aujourd'hui, je vais parler brièvement de l'utilisation du validateurRépertoire :
1. un validateur Nous avons d'abord besoin d'un dossier pour stocker notre validateur. Nous créons un dossier au même niveau que le contrôleur sous le module et le nommons validate
Ensuite, nous pouvons créer le validateur. Il nous suffit de créer une classe et d'hériter de la classe validate de tp5.
Mais les amis qui sont familiers avec la pensée orientée objet doivent savoir que lorsque nous avons besoin d'une méthode qui doit être utilisée par chaque validateur, mais ne modifiez pas le code source de tp5. Nous écrirons une classe supplémentaire comme classe de base. Tous les validateurs héritent de cette classe de base, puis cette classe de base hérite de la classe de validation de tp5. Ici, nous l'appelons baseValidateCréons maintenant un validateur sérieux. Par exemple :
namespace app\index\validate; use think\Validate; class User extends Validate { protected $rule = [ 'name' => 'require|max:25', 'email' => 'email', ]; }
//虚拟一组数据,实际开发中是接受用户传递的数据 $data = [ 'name'=>'thinkphp', 'email'=>'thinkphp@qq.com' ]; $validate = Loader::validate('User'); if(!$validate->check($data)){ dump($validate->getError()); }
.
Ensuite, nous devons Les données sont vérifiées. Si la vérification échoue, le message d'erreurnamespace 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); } } }
Comme je l'ai déjà dit, BaseValidate est utilisé pour être hérité, donc pour le vrai validateur, nous avons Je n'ai pas commencé à écrire. Les règles sont formulées dans ce validateur. Pour une compréhension plus approfondie, voici un exemple utilisant des règles de validation personnalisées. En fait, les règles de vérification écrites par tp devraient être suffisantes
Prenons comme exemple les données les plus couramment acceptées, qui sont l'identifiant. Habituellement, cet identifiant représente l'identifiant d'une certaine donnée dans notre base de données. conçoivent souvent cet identifiant comme une clé primaire non signée à incrémentation automatique, qui est traduite en langage humain sous la forme d'un entier positif. Ensuite, si le paramètre transmis par le client est un nombre négatif ou décimal, il ne doit pas passer la vérification.Sur la base des exigences ci-dessus, nous créons un validateur. L'emplacement est toujours le même qu'avant dans le dossier validate
et nommé IdMustBePositiveInt.php (le nom est un peu long, mais heureusement le texte a du sens)
Tout d'abord, nous devons hériter de notre validateur de baseclass IdMustBePositiveInt extends BaseValidate
protected $rule = [ //require是内置规则,而tp5并没有正整数的规则,所以下面这个positiveInt使用自定义的规则 'id' => 'require|positiveInt' ];
//系统会自动传入几个参数 第一个是 要验证的值,第二个是规则,自己可以规定规则内容或者不写,第三个是最初传入的data。其实不只这三个参数,想了解详细的可以看看文档 protected function positiveInt($value, $rule='', $data) { if (is_int(($value+0))&&($value+0)>0) { return true; }else{ return 'id必须为正整数'; } }
Selon notre encapsulation précédente, l'effet que nous devons obtenir est d'accepter les paramètres et de vérifier les paramètres. en un. Alors maintenant, comment appelons-nous la vérification ?
Voici les trucs géniaux Prenons l'identité comme exemplepublic 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验证器的介绍了就写到这里了,希望对大家的学习有所帮助。
相关推荐:
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!