国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - ThinkPHP5 驗證器的具體使用

ThinkPHP5 驗證器的具體使用

2019-09-29 14:15勃起狂奔者 PHP教程

這篇文章主要介紹了ThinkPHP5 驗證器的具體使用,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

前言:

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

目錄:

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

1.創建驗證器

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

ThinkPHP5 驗證器的具體使用

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

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

這里我們把他取名為baseValidate

ThinkPHP5 驗證器的具體使用

那么現在再創建一個正兒八經的驗證器了。舉個例子:

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文件夾下

ThinkPHP5 驗證器的具體使用

取名為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驗證器的介紹了就寫到這里了,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 综合五月 | a欧美| 亚洲国产精品久久久久 | 四虎免费在线播放 | 精品视频二区 | 午夜精品福利在线观看 | 亚洲午夜成激人情在线影院 | 婷婷国产成人精品视频 | 一级毛片观看 | 欧美日韩一二三区 | 国产高清不卡在线 | 黄网视频| 欧美小电影 | 91国自产精品中文字幕亚洲 | 中文字幕在线免费看 | 亚洲视频第一页 | 亚洲高清视频在线观看 | 精品视频在线免费观看 | 亚洲成a人 | 欧美激情国产日韩精品一区18 | 在线亚洲免费 | 国产欧美精品区一区二区三区 | 久久久精品免费视频 | 亚洲国产精品一区二区久久 | 欧美大片高清在线观看平台 | 欧美亚洲国产一区 | 国产一级一级毛片女人精品 | 免费一级特黄做受大片 | 成人精品一区二区三区中文字幕 | 国产黄色精品 | 在线观看日韩av | 91香蕉视频在线 | 午夜在线视频 | 国产精品不卡一区二区三区 | 久久一级 | 99精品国产一区二区三区 | 毛片一级网站 | 欧美视频在线播放 | 亚洲狠狠丁香婷婷综合久久久 | 精品一区二区三区中文字幕 | 日韩在线电影 |