この記事では、主に ThinkPHP5 バリデーターの具体的な使用方法を紹介します。これを必要とする友人に参考にしてもらいます。
はクライアントから渡されたパラメータを受け入れます。このパラメータが信頼できないことは誰もが知っているため、バックエンド開発者はこのパラメータを検証する必要があります。以前の開発では tp5 バリデーターの存在だけは知っていましたが、以前の開発検証ではモデル フィールドに基づいたものが多かったので、その目的は知りませんでした。バリデーターは API 開発に適しています
今日はバリデーターの使用法について簡単に説明しますバリデーターを作成します
別のバリデーターを作成します
呼び出し検証
まず、モジュールの下にコントローラーと同じレベルにフォルダーを作成し、それに validate
という名前を付けます。バリデータを作成する クラスを作成し、tp5 の validate クラスを継承するだけです。
しかし、オブジェクト指向の考え方に精通している友人なら、すべてのバリデーターで使用する必要があるメソッドが必要な場合に、tp5 のソース コードを変更しないことを知っているはずです。基本クラスとしてもう 1 つのクラスを作成します。すべてのバリデーターはこの基本クラスを継承し、この基本クラスは tp5 の検証クラスを継承します。
ここでは、baseValidate という名前を付けます
それでは、本格的なバリデーターを作成しましょう。例:
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()); }
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); } } }
BaseValidate は継承されるために使用されると前に述べたので、実際のバリデーターはまだ書き始めていません。ルールはこのバリデータに定式化されます。より深く理解するために、カスタム検証ルールを使用した例を次に示します。実際、tp が作成した検証ルールは非常に役立つはずです 最も一般的に受け入れられているデータ、つまり id を例に挙げてみましょう。通常、この ID はデータベース内の特定のデータの ID を表します。 id 符号なしの自動インクリメント主キーとして設計されており、人間の言語に翻訳すると正の整数になります。次に、顧客から渡されたパラメータが負の数または小数の場合、検証に合格しないはずです。
上記の要件に基づいて、バリデータを作成しましょう。場所は以前と同じで、IdMustBePositiveInt.php という名前の検証フォルダー内にあります
(名前は少し長いですが、幸いなことにわかりやすいです)
まず第一に、基本的なバリデーターを継承する必要があります
class 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必须为正整数'; } }
3. 呼び出し検証
前のカプセル化によると、達成する必要がある効果は、パラメーターの受け入れとパラメーターの検証を 1 つにまとめることです。では、どうやって検証を呼び出すのかここで、ID を例にしてみましょう
public 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验证器的介绍了就写到这里了,希望对大家的学习有所帮助。
相关推荐:
以上がThinkPHP5 バリデーターの具体的な使用法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。