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

請(qǐng)求參數(shù)校驗(yàn)

1.前言

本小節(jié)主要介紹如何使用 ThinkPHP 提供的 Validate 驗(yàn)證器,它可以在控制器接收參數(shù)之前驗(yàn)證參數(shù),若參數(shù)不合符業(yè)務(wù)要求,就會(huì)返回相應(yīng)的錯(cuò)誤提示,在實(shí)際工作中,數(shù)據(jù)校驗(yàn)的是一項(xiàng)必不可少的工作,數(shù)據(jù)的嚴(yán)格校驗(yàn)可能減少很多不必要的代碼執(zhí)行,這從某種層面來(lái)說(shuō)減少了服務(wù)器壓力,從安全角度來(lái)說(shuō),數(shù)據(jù)校驗(yàn)?zāi)鼙苊饽承┎槐匾?BUG,比如對(duì)手機(jī)號(hào)碼的校驗(yàn),能有效地阻止后期發(fā)送短信失敗導(dǎo)致的 BUG能有效地防止 XSS、SQL注入等攻擊。

2.新建驗(yàn)證器類

這里以之前添加學(xué)生接口為例,該接口入?yún)⑿枰?學(xué)生姓名(name)、年齡(age)、身份證號(hào)(id_number),首先新建一個(gè) app\Validate 目錄,然后在該目錄下新建一個(gè) StudentValidate 類,代碼如下:

<?php

namespace app\Validate;


use think\Validate;

class StudentValidate extends Validate
{

}

如下圖所示:
圖片描述

3.設(shè)置字段驗(yàn)證規(guī)則

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

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

如下圖所示:
圖片描述

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

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

    /**
     * 設(shè)置不滿足字段要求的提示語(yǔ)
     * @var string[]
     */
    protected $message = [
        'name.require' => '學(xué)生姓名不能為空',
        'name.max' => '學(xué)生姓名長(zhǎng)度不能超過(guò)5',
        'age.number' => '學(xué)生年齡必須是數(shù)字',
        'age.between' => '學(xué)生年齡值必須是1-120之間',
        'id_number.require' => '學(xué)生身份證號(hào)不能為空',
        'id_number.in' => '學(xué)生身份證號(hào)必須是18位'
    ];

如下圖所示:
圖片描述

5.設(shè)置驗(yàn)證場(chǎng)景

若想要在不同場(chǎng)景下驗(yàn)證不同的字段,可在 protected $scene 總設(shè)置如下內(nèi)容:

    /**
     * 設(shè)置驗(yàn)證場(chǎng)景
     * @var string[][]
     */
    protected $scene = [
        'add-student' => ['name', 'age', 'id_number'],
        'edit-student' => ['name', 'age']
    ];

如下圖所示:
圖片描述

6.在控制器中調(diào)用驗(yàn)證器

可以在學(xué)生添加接口的控制器中增加如下內(nèi)容:

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

如下圖所示:
圖片描述

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

7.請(qǐng)求接口驗(yàn)證

postman 中請(qǐng)求上述接口,如下圖是缺少學(xué)生 name 字段提示的錯(cuò)誤:
圖片描述

學(xué)生 name 字段超過(guò)長(zhǎng)度提示如下:
圖片描述

8.內(nèi)置驗(yàn)證規(guī)則表

下面列出 ThinkPHP 提供的內(nèi)置驗(yàn)證規(guī)則:

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

9.小結(jié)

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

Tips: 代碼倉(cāng)庫(kù):https://gitee.com/love-for-poetry/tp6