婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > ThinkPHP5 驗證器的具體使用

ThinkPHP5 驗證器的具體使用

熱門標簽:拉薩打電話機器人 寶安400電話辦理 智能外呼電銷系統 h5 地圖標注 高識別電銷機器人 哈爾濱400電話辦理到易號網 電銷機器人-快迭智能 合肥外呼系統app 沈陽人工智能電銷機器人公司

前言:

我們在做API開發的時候,我們會接受客戶端傳來的參數,大家都知道這個參數是不可信的,我們后端開發人員必須對這個參數進行驗證。我在之前的開發中只是知道tp5的驗證器,并不知道他的用途,因為之前的開發驗證,往往都是基于模型字段進行的驗證。而驗證器更適用與API開發,今天就簡單講下驗證器的使用

目錄:

  1. 創建驗證器
  2. 書寫單獨驗證器
  3. 調用驗證

1.創建驗證器

首先我們需要一個文件夾來存放我們的驗證器,我們在模塊下創建一個同控制器平級的文件夾,取名為validate

然后我們就可以來建立驗證器了,我們只需要創建一個類,繼承tp5的validate類就可以了。

但是熟悉面向對象思想的朋友一定知道,當我們需要一個方法每個驗證器都要用到,但是又不去修改tp5的源碼時。我們就多寫一個類來作為我們的基類。所有的驗證器都繼承這個基類,然后這個基類再去繼承tp5的validate類。

這里我們把他取名為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());
}

這樣一個驗證器的應用就寫好了。我們來看看有沒有什么可以簡化的地方。

  1. 首先需要被驗證的數據是我們從客戶端那接受過來的那么,第一步接受數據
  2. 然后我們要對數據進行驗證,如果驗證不通過,返回錯誤信息

這兩部是每次接口被請求都是要做的。那么我們就想把這個封裝到BaseValidate中去

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);
    }
  }
}

這個goCheck方法封裝好后,有人可能會問,這個驗證規則在哪里呢?

2. 書寫單獨驗證器

之前有說過BaseValidate是用來被繼承的,那么真正的驗證器,我們還沒有開始寫。規則就制定到這個驗證器中。為了更深入的理解,這里舉例子順便使用了自定義驗證 規則。其實tp寫好了的驗證規則應該很夠用了

我們就拿最常接受的數據來舉例子,那就是 id 同常這個id就代表了我們數據庫中某條數據的id,這個id我們往往設計為無符號自動遞增的主鍵,翻譯成人話就是正整數。那么如果客戶傳來的參數是負數或者小數那么就不應該通過驗證。

我們根據上述需求,我們來創建一個驗證器。位置還是跟之前的一樣在validate文件夾下

取名為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必須為正整數';
    }
  }

!!注意:這里如果判斷失敗:返回的不是false 返回的是錯誤信息。

3. 調用驗證

根據我們之前的封裝,我們需要達到的效果就是接受參數,驗證參數一體。那么現在我們如何調用驗證呢

厲害的來了,我們還是以id為例

 public function test($id)
  {
    //在控制器中直接調用寫上這行代碼就搞定驗證了
    (new IdMustBePositiveInt)->goCheck();
  }
  1. 就這樣的一句代碼,直接搞定驗證。當我們實例化id驗證器,調用它父類的goCheck方法。
  2. goCheck方法會接受參數,并且將參數傳入validate對象上check方法
  3. 就會去匹配我們在id驗證器中$rule中規定的require規則和我們自定義的規則。
  4. 如果都通過就會返回true
  5. 如果其中一條不匹配則會拋出異常

這次只舉了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驗證器的介紹了就寫到這里了,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • 基于thinkPHP3.2實現微信接入及查詢token值的方法
  • Thinkphp5 微信公眾號token驗證不成功的原因及解決方法
  • thinkphp5框架API token身份驗證功能示例
  • ThinkPHP5.1表單令牌Token失效問題的解決
  • 完美解決thinkphp驗證碼出錯無法顯示的方法
  • ThinkPHP驗證碼使用簡明教程
  • ThinkPHP令牌驗證實例
  • thinkPHP實現表單自動驗證
  • ThinkPHP表單自動驗證實例
  • 詳解ThinkPHP3.2.3驗證碼顯示、刷新、校驗
  • thinkphp框架使用JWTtoken的方法詳解

標簽:林芝 梅州 威海 山東 泰州 巴中 張家口 成都

巨人網絡通訊聲明:本文標題《ThinkPHP5 驗證器的具體使用》,本文關鍵詞  ThinkPHP5,驗證,器,的,具體,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《ThinkPHP5 驗證器的具體使用》相關的同類信息!
  • 本頁收集關于ThinkPHP5 驗證器的具體使用的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    一卡二卡欧美日韩| 欧美色图第一页| 麻豆精品视频在线| 91麻豆国产精品久久| 91精品在线麻豆| 蜜臀av亚洲一区中文字幕| 色综合久久久网| 欧美zozo另类异族| 免费人成网站在线观看欧美高清| 欧美影院一区二区| 日韩电影免费在线看| 2022国产精品视频| 国产福利91精品| 亚洲美女视频在线观看| 欧美在线一区二区三区| 亚洲电影在线免费观看| 欧美卡1卡2卡| 不卡大黄网站免费看| 亚洲欧美激情小说另类| 日韩丝袜美女视频| 91亚洲精华国产精华精华液| 五月天一区二区三区| 国产精品美女一区二区在线观看| 日本久久电影网| 激情都市一区二区| 午夜国产精品影院在线观看| 国产欧美日韩在线| 91精品国产综合久久久蜜臀图片| 国产成人免费网站| 紧缚奴在线一区二区三区| 国产精品天天看| 久久精品人人做| 精品国一区二区三区| 欧美日韩aaaaaa| 欧美日本视频在线| 一本到三区不卡视频| aaa欧美日韩| av在线不卡免费看| 国产成人无遮挡在线视频| 九九**精品视频免费播放| 日本大胆欧美人术艺术动态| 亚洲最色的网站| 中文一区二区完整视频在线观看| 3751色影院一区二区三区| 欧美日韩精品免费| 在线不卡免费av| 26uuu亚洲综合色| 国产目拍亚洲精品99久久精品| 日韩无一区二区| 国产欧美一区二区精品仙草咪| 久久久久久**毛片大全| 日韩码欧中文字| 一区二区三区鲁丝不卡| 亚洲在线观看免费视频| 日韩avvvv在线播放| 国产精品一二三在| 欧美日韩www| 国产精品乱人伦一区二区| 亚洲v精品v日韩v欧美v专区| 精品午夜久久福利影院| 色哟哟精品一区| 国产欧美日韩不卡| 麻豆久久久久久久| 色综合中文综合网| 国产欧美一区二区三区网站| 亚洲一区在线视频| 国产精品资源网| 日韩欧美一级在线播放| 亚洲欧美国产77777| av成人动漫在线观看| 久久久蜜臀国产一区二区| 国产综合色视频| 91成人在线免费观看| 国产成人亚洲综合a∨婷婷| 麻豆精品精品国产自在97香蕉| 3d动漫精品啪啪一区二区竹菊| 国产精品123| 日本欧美一区二区三区乱码| 国产精品欧美久久久久一区二区| 欧美久久久一区| 久久精品久久99精品久久| 欧美剧在线免费观看网站| 天堂在线一区二区| 欧美刺激脚交jootjob| 国产传媒欧美日韩成人| 国产精品久久久久久久久图文区 | 国产精品乱码久久久久久| 丁香网亚洲国际| 日韩精品一二区| 国产精品久久毛片| 久久综合精品国产一区二区三区| av一区二区三区黑人| 亚洲不卡在线观看| 中文字幕日韩欧美一区二区三区| 91黄色免费观看| 国产69精品久久777的优势| 亚洲成人av一区二区| 精品少妇一区二区三区在线播放| 97成人超碰视| 亚洲网友自拍偷拍| 久久―日本道色综合久久| 欧美亚洲国产一区二区三区va| 久久精品国产99| 亚洲国产成人av网| 一区二区三区欧美日| 久久网站热最新地址| 日韩视频在线一区二区| 欧美精品 国产精品| 欧美人伦禁忌dvd放荡欲情| 91麻豆精东视频| 色噜噜久久综合| 欧美视频日韩视频在线观看| aa级大片欧美| 欧美色视频一区| 日韩欧美在线观看一区二区三区| 欧美一区二区在线不卡| 日韩一区二区在线看| 久久综合九色综合欧美就去吻| 欧美激情中文字幕一区二区| 国产精品色噜噜| 亚洲成年人影院| 国产剧情一区二区| thepron国产精品| 欧美写真视频网站| 国产欧美一区二区精品性| 亚洲福利视频一区| 成人精品一区二区三区四区| 国产成人精品午夜视频免费| 欧美日韩一级片在线观看| 欧美午夜精品一区二区三区| 中文字幕va一区二区三区| 午夜精品久久久久久久99水蜜桃| 天堂在线亚洲视频| 精品一区在线看| 91亚洲永久精品| 欧美成人福利视频| 国产欧美1区2区3区| 亚洲欧美日韩国产综合在线| 一区在线观看视频| 日韩精品高清不卡| 91国内精品野花午夜精品| 欧美mv日韩mv| 日本成人在线视频网站| 91色porny蝌蚪| 国产视频不卡一区| 精久久久久久久久久久| 一道本成人在线| |精品福利一区二区三区| 国产.精品.日韩.另类.中文.在线.播放| 91成人看片片| 亚洲国产毛片aaaaa无费看| 91免费看片在线观看| 中文字幕五月欧美| 成人av资源下载| 日韩毛片在线免费观看| 色婷婷精品久久二区二区蜜臂av | 91免费小视频| 亚洲天堂久久久久久久| 国产aⅴ精品一区二区三区色成熟| 欧美一级爆毛片| 国产在线一区二区综合免费视频| 欧美成人乱码一区二区三区| 久久99国产精品久久99 | 日本中文一区二区三区| 日韩亚洲欧美在线| 国产在线麻豆精品观看| 日本一区二区成人| 欧美综合在线视频| 老色鬼精品视频在线观看播放| 精品国产乱码久久| 国产suv精品一区二区三区| 亚洲一区二区三区免费视频| 欧美精品一区二区三区蜜臀| 成人a级免费电影| 国产美女一区二区| 日本v片在线高清不卡在线观看| 欧美国产丝袜视频| 欧美电视剧免费全集观看| 99久久免费国产| 国产成人a级片| 五月天激情综合| 国产精品久久午夜| 欧美精品一区二区三区四区| 91蝌蚪porny九色| 成人高清免费观看| 成人丝袜视频网| 久久精品999| 久久精品国产一区二区| 亚洲男帅同性gay1069| 欧美高清在线视频| 538prom精品视频线放| 99久久伊人网影院| 美女任你摸久久| 美女任你摸久久| 国内精品伊人久久久久影院对白| 亚洲色图20p| 天堂资源在线中文精品| 五月激情六月综合| 蜜桃传媒麻豆第一区在线观看| 中文字幕永久在线不卡|