第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

請求參數校驗

1.前言

本小節(jié)主要介紹如何使用 ThinkPHP 提供的 Validate 驗證器,它可以在控制器接收參數之前驗證參數,若參數不合符業(yè)務要求,就會返回相應的錯誤提示,在實際工作中,數據校驗的是一項必不可少的工作,數據的嚴格校驗可能減少很多不必要的代碼執(zhí)行,這從某種層面來說減少了服務器壓力,從安全角度來說,數據校驗能避免某些不必要的 BUG,比如對手機號碼的校驗,能有效地阻止后期發(fā)送短信失敗導致的 BUG能有效地防止 XSS、SQL注入等攻擊。

2.新建驗證器類

這里以之前添加學生接口為例,該接口入參需要 學生姓名(name)、年齡(age)、身份證號(id_number),首先新建一個 app\Validate 目錄,然后在該目錄下新建一個 StudentValidate 類,代碼如下:

<?php

namespace app\Validate;


use think\Validate;

class StudentValidate extends Validate
{

}

如下圖所示:
圖片描述

3.設置字段驗證規(guī)則

字段的驗證規(guī)則可以在 protected $rule 中設置如下規(guī)則:

    /**
     * 設置字段驗證規(guī)則
     * @var string[]
     */
    protected $rule = [
        'name' => 'require|max:5',
        'age' => 'number|between:1,120',
        'id_number' => 'require|in:18',
    ];

如下圖所示:
圖片描述

4.設置不滿足規(guī)則的提示語

若想要設置不滿足驗證規(guī)則字段的錯誤提示語,可在 protected $message 中設置如下內容:

    /**
     * 設置不滿足字段要求的提示語
     * @var string[]
     */
    protected $message = [
        'name.require' => '學生姓名不能為空',
        'name.max' => '學生姓名長度不能超過5',
        'age.number' => '學生年齡必須是數字',
        'age.between' => '學生年齡值必須是1-120之間',
        'id_number.require' => '學生身份證號不能為空',
        'id_number.in' => '學生身份證號必須是18位'
    ];

如下圖所示:
圖片描述

5.設置驗證場景

若想要在不同場景下驗證不同的字段,可在 protected $scene 總設置如下內容:

    /**
     * 設置驗證場景
     * @var string[][]
     */
    protected $scene = [
        'add-student' => ['name', 'age', 'id_number'],
        'edit-student' => ['name', 'age']
    ];

如下圖所示:
圖片描述

6.在控制器中調用驗證器

可以在學生添加接口的控制器中增加如下內容:

validate(StudentValidate::class)->scene('add-student')->check($this->request->param());

如下圖所示:
圖片描述

Tips: 其中 validate() 是一個框架提供的一個輔助函數,scene('add-student') 表示驗證場景是 add-student,$this->request->param() 表示接口傳入的參數。

7.請求接口驗證

postman 中請求上述接口,如下圖是缺少學生 name 字段提示的錯誤:
圖片描述

學生 name 字段超過長度提示如下:
圖片描述

8.內置驗證規(guī)則表

下面列出 ThinkPHP 提供的內置驗證規(guī)則:

驗證規(guī)則名 含義
require 驗證字段為必須
number 驗證字段是否為數字類型
integer 驗證字段是否為整數
float 驗證字段是否為浮點型
boolean 或 bool 驗證字段是否為布爾值
email 驗證字段是否符合郵箱格式
array 驗證字段是否為數組
date 驗證字段是否為有效的日期
alpha 驗證字段是否為純字母
alphaNum 驗證字段是否為字母+數字混合
alphaDash 驗證字段是否為字母+數字+_+-混合
chs 驗證字段是否為 漢字
chsAlpha 驗證字段是否為 漢字+字母混合
chsAlphaNum 驗證字段是否為 漢字+字母+數字混合
chsDash 驗證字段是否為 漢字+字母+數字+_+-混合
cntrl 驗證字段是否控制字符(換行、縮進、空格)
graph 驗證字段是否為可打印字符(空格除外)
print 驗證字段是否為可打印字符(包括空格)
lower 驗證字段是否為小寫字母
upper 驗證字段是否為大寫字母
space 驗證字段是否為空白字符(包括縮進,垂直制表符,換行符,回車和換頁字符)
xdigit 驗證字段是否為十六進制字符串
url 驗證字段是否為有效的URL地址
ip 驗證字段是否為有效的IP地址,支持驗證ipv4和ipv6格式的IP地址
dateFormat:format 驗證字段是否為指定格式的日期,如 dateFormat:y-m-d 表示年月日
mobile 驗證字段是否為有效的手機格式
idCard 驗證字段是否為有效的身份證格式
macAddr 驗證字段是否為有效的MAC地址
zip 驗證字段是否為有效的郵政編碼
in 驗證字段是否為是否在某個范圍,如 in:1,2,3 表示取值在 1,2,3
notIn 驗證字段是否為不在某個范圍
between 驗證字段是否為在某個區(qū)間,如 between:1,10 表示 1-10 之間
notBetween 驗證字段是否為不在某個范圍
length:num1,num2 驗證字段是否為長度是否在某個范圍,如 length:4,25 長度在 4-25,length:4 表示指定長度,如果驗證的數據是數組,則判斷數組的長度。如果驗證的數據是File對象,則判斷文件的大小。
max:number 驗證字段的 最大長度,如 max:10 表示最大長度 10,注意不包含字段不存在的情況,如果驗證的數據是數組,則判斷數組的長度。如果驗證的數據是File對象,則判斷文件的大小。
min:number 驗證字段的 最小長度,如min:5 表示最小長度 5,注意不包含字段不存在的情況,如果驗證的數據是數組,則判斷數組的長度。如果驗證的數據是File對象,則判斷文件的大小。
after:日期 驗證字段是否為在某個日期之后,如 after:2020-11-18 表示 2020-11-18 之后
before:日期 驗證字段是否為在某個日期之前,如 after:2020-11-18 表示 2020-11-18 之前
expire:開始時間,結束時間 驗證當前操作(注意不是某個值)是否在某個有效日期之內,如expire:2020-1-21,2020-5-1表示 2020-01-212020-05-01 之間
allowIp:allow1,allow2,… 驗證當前請求的IP是否允許訪問,如 'allowIp:114.45.4.55' 表示ip為 114.45.4.55
denyIp:allow1,allow2,… 驗證當前請求的IP是否禁止訪問,如 denyIp:114.45.4.55
confirm 驗證字段是否為和另外一個字段值一致,如 confirm:new_value 表示當前判斷字段值是否和 new_value 字段值一致
eq 或者 = 或者 same 驗證字段是否為等于某個值,如eq:100 表示等于 100=:10 表示等于 10,same:20 表示等于 20
egt 或者 >= 驗證字段是否為大于等于某個值,如 egt:30表示大于等于30,>=50 表示大于等于50
gt 或者 > 驗證字段是否為大于某個值,同上
elt 或者 <= 驗證字段是否為小于等于某個值,同上
lt 或者 < 驗證字段是否為小于某個值
file 驗證字段是否為一個上傳文件
image:width,height,type 驗證字段是否為一個圖像文件,其中 width,height和type都是可選,width和height必須同時定義
fileExt:允許的文件后綴 驗證字段是否為上傳文件后綴
fileMime:允許的文件類型 驗證字段是否為上傳文件類型
fileSize:允許的文件字節(jié)大小 驗證字段是否為上傳文件大小
token:表單令牌名稱 表單令牌驗證
unique:table,field,except,pk 驗證當前請求的字段值是否為唯一的
requireIf:field,value 驗證某個字段的值等于某個值的時候必須
requireWith:field 驗證某個字段有值的時候必須
requireWithout:field 驗證某個字段沒有值的時候必須
requireCallback:callable 驗證當某個callable為真的時候字段必須

9.小結

本小節(jié)主要介紹如何使用 ThinkPHP 提供的 Validate 驗證器,它可以幫助快速有效地驗證請求數據的有效性和正確性,另外還列舉了不同場景下內置的字段驗證規(guī)則,需要注意的是上面學生身份證號碼的驗證可以使用 isCard。

Tips: 代碼倉庫:https://gitee.com/love-for-poetry/tp6