11 驗證器《ThinkPHP6 入門到電商實戰》

注:示例來源于官方手冊

一、驗證器定義

驗證器用于對數據進行驗證,你可以理解為一個“層”,在傳入數據時可以使用這個層對數據進行驗證,這樣就可以不用頻繁的在方法中編寫代碼去驗證,只需要編寫一個驗證層即可,此操作需要自己編寫對應的代碼,本節只是介紹驗證器的使用。

此時我們在 app 目錄下新建一個 validate 文件夾,在其中新建一個 User.php 假設用于用戶傳入的用戶信息進行驗證。

在這里插入圖片描述
隨后在 User.php 中編寫如下代碼:

<?php
namespace app\validate;
use think\Validate;class User extends Validate
{protected $rule =   ['name'  => 'require|max:25','age'   => 'number|between:1,120','email' => 'email',    ];protected $message  =   ['name.require' => '名稱必須','name.max'     => '名稱最多不能超過25個字符','age.number'   => '年齡必須是數字','age.between'  => '年齡只能在1-120之間','email'        => '郵箱格式錯誤',    ];}

以上代碼中可以看到,當前 User 類繼承至驗證器 Validate 類,其中 protected 的屬性 rule 是表示驗證規則,為一個數組;name 表示這個字段名 require 表示為必須,并且 max 最大字符不能超過 25個;age 是 number 類型數據,在 1-120 之間,同一個字段多個不同的規則使用 | 進行分隔,若只有一個規則就如同 email 字段的規則是 email 表示是郵件字段。

在此還發現了 message 屬性,其中指定了每個規則驗證不通過時的提示信息。

二、驗證器使用方法

以下是一個最簡單的驗證器使用方法:

public function userValidate(){try {validate(User::class)->check(['name'  => 'thinkphp','email' => 'thinkphpcom',]);} catch (ValidateException $e) {// 驗證失敗 輸出錯誤信息dump($e->getError());}
}

當驗證器驗證錯誤將會拋出異常,并且會中斷驗證,使用驗證器很簡單,use 之后直接使用 validate(User::class)指定驗證器后使用 check 方法即可。在 check 方法中需要傳入一個數組,數組值為需要驗證字段的信息,在以上示例中我的 email 是錯誤的郵箱編寫格式,此時將會拋出異常:
在這里插入圖片描述

三、設置批量驗證

在以上一點中已經說過,驗證是會中斷的,若有多個錯誤信息時,需要批量驗證的話可以設置 batch 為 true 即可,如下示例:

public function userValidate(){try {validate(User::class)->batch(true)->check(['name'  => 'thinkphp','age'  => 130,'email' => 'thinkphpcom',]);} catch (ValidateException $e) {// 驗證失敗 輸出錯誤信息dump($e->getError());}
}

以上實例中,我的 age 值明顯大于了本身規則的限定在 120 以內,所以此時將會拋出兩個提示:
在這里插入圖片描述

四、自定義驗證規則

驗證器還支持自定義的驗證規則,例如以下示例,首先是 user 驗證器中:

class User extends Validate
{protected $rule =   ['name'  => 'require|checkName:敏感字,','age'   => 'number|between:1,120','email' => 'email',    ];protected $message  =   ['name.require' => '名稱必須','name.max'     => '名稱最多不能超過25個字符','age.number'   => '年齡必須是數字','age.between'  => '年齡只能在1-120之間','email'        => '郵箱格式錯誤',    ];// 自定義驗證規則protected function checkName($value, $rule, $data=[]){return $rule == $value ? true : '敏感字符';}}

此時修改了 rule 的驗證規則 name,其中有一個 checkName 規則是我們自定義的方法,二冒號后面的敏感字是該方法的參數,隨后我們可以查看方法 checkName,其中 value 是需要驗證的字符,rule 是敏感字,data 是所有需要驗證的信息數組;接著我們傳入對應的變量:

try {validate(User::class)->batch(true)->check(['name'  => '敏感字','age'  => 110,'email' => '123@163.com',]);
} catch (ValidateException $e) {// 驗證失敗 輸出錯誤信息dump($e->getError());
}

此時將會拋出異常:

在這里插入圖片描述

五、手動使用驗證器

驗證器還支持自己手動編寫規則,自行調用,如下示例:

public function userValidate(){$validate = \think\facade\Validate::rule('age', 'number|between:1,120')->rule(['name'  => 'require|max:25','email' => 'email']);$data = ['name'  => 'thinkphp','email' => 'thinkphp'];if (!$validate->check($data)) {dump($validate->getError());}
}

手動調用方式大致相同,初始化規則創建驗證器對象后,在使用check 時進行check 即可。

更多驗證規則可以查看手冊:https://www.kancloud.cn/manual/thinkphp6_0/1037629
且官方還提供了路由驗證、令牌、注解驗證 等驗證,可以自行查看官方手冊,本專欄只介紹一般方法。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/285948.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/285948.shtml
英文地址,請注明出處:http://en.pswp.cn/news/285948.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

合作開發和委托開發完成成果的歸屬

據專利法第8條的規定&#xff1a;“兩個以上單位或者個人合作完成的發明創造、一個單位或者個人接受其他單位或者個人委托所完成的發明創造&#xff0c;除另有協議的以外&#xff0c;申請專利的權利屬于完成或者共同完成的單位或者個人&#xff1b;申請被批準后&#xff0c;申請…

C語言試題六十三之請編寫函數fun:將s所指字符串中ascii值為偶數的字符刪除,串中剩余字符形成一個新串放在t所指的數組中。

1、 題目 請編寫函數fun,其功能是:將s所指字符串中ascii值為偶數的字符刪除,串中剩余字符形成一個新串放在t所指的數組中。 2 、溫馨提示 C語言試題匯總里可用于計算機二級C語言筆試、機試、研究生復試中C程序設計科目、幫助C語言學者打好程序基礎、C語言基礎,鍛煉您…

nginx+php

nginxphp基礎架構 生產實踐 nginx配置文件: 主配置文件 123456789101112131415161718192021222324252627282930313233[rootlinux-node1 conf.d]# cat /etc/nginx/nginx.conf user nginx;worker_processes auto;error_log /var/log/nginx/error.log; pid /run/nginx.pid; # Load…

【ArcGIS風暴】ArcGIS10.8中柵格數據金字塔的來龍去脈,你知道嗎?

如下圖所示,通常情況下,當將沒有金字塔的柵格數據集添加至 ArcGIS時,系統將提示您構建金字塔。金字塔指不同比例下分辨率降低的數據概視圖。金字塔十分有用,因為金字塔提升了分辨率低于其全分辨率的柵格數據集的繪制速度。建議構建用于大型柵格數據集的金字塔。 點擊【是】…

斯坦福大學Andrew Ng - 機器學習筆記(8) -- 推薦系統 大規模機器學習 圖片文字識別...

大概用了一個月&#xff0c;Andrew Ng老師的機器學習視頻斷斷續續看完了&#xff0c;以下是個人學習筆記&#xff0c;入門級別&#xff0c;權當總結。筆記難免有遺漏和誤解&#xff0c;歡迎討論。 鳴謝&#xff1a;中國海洋大學黃海廣博士提供課程視頻和個人筆記&#xff0c;在…

表單按鈕實現 type=image

<input type"image" src"http://img01.51jobcdn.com/im/2012/index/main_login_btn.gif" border"0" οnfοcus"blur()">轉載于:https://www.cnblogs.com/zxmbest1/p/5121666.html

.NET7之MiniAPI(特別篇) .NET Preview5參數綁定

.NET Preview5中&#xff0c;給MiniAPI帶來了一個參數綁定的功能&#xff0c;看到這個功能&#xff0c;我一下子就開心了&#xff0c;因為它提供了一個把松散的傳入數據或注入功能耦合在一起的能力&#xff0c;并且可以根據自己的需求自由組合&#xff0c;結合上原來的Fromxxx(…

C語言試題六十四之請編寫函數fun:求勾股數

??個人主頁:個人主頁 ??系列專欄:C語言試題200例目錄 ??推薦一款刷算法、筆試、面經、拿大公司offer神器 ?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 請編寫函數…

【CSS動效實戰(純CSS與JS動效)】02 flex 布局實戰(仿 JD 及 gitCode 布局)及 media 自適應初探 下

二、flex 仿 gitCode 布局 及 自適應 首先查看我們的頁面&#xff1a; 這個時候直接頂部一個塊&#xff0c;下面分為左中右三個塊&#xff0c;然后就解決了&#xff0c;是不是很簡單&#xff1f;相比剛剛那么這個簡單多了。那就來做吧。 2.1 基本布局 首先給一個 style 價格…

C語言按行和列求平均成績代碼(指針,二維數組)

如下所示成績表,如何按行(每個人)或按列(每門課)的平均成績? 結果: 文章目錄 1. 自定義行平均函數2. 自定義列平均函數3. main()函數調用平均函數1. 自定義行平均函數 float save(float **PA,int M,int

架構師必須知道的架構設計原則

目錄 一、前言 二、軟件設計原則 GRASP通用職責分配軟件模式 1. 信息專家(Information Expert) 2. 創建者(Creator) 3. 低耦合(Low Coupling) 4. 高內聚(High Cohesion) 5.控制器(Controller) 6. 多態(Polymorphism) 7. 純虛構(Pure Fabrication) 8. 間接(Indirectio…

LeetCode:Minimum Path Sum(網格最大路徑和)

Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which minimizes the sum of all numbers along its path. Note: You can only move either down or right at any point in time. 典型的動態規劃問題。 設dp[i][j]表示從左…

delete在js里為引用刪除

delete 運算符從對象中刪除一個屬性&#xff0c;或從數組中刪除一個元素。delete expressionexpression 參數是一個有效的 JScript 表達式&#xff0c;通常是一個屬性名或數組元素。說明如果 expression 的結果是一個對象&#xff0c;且在 expression 中指定的屬性存在&#xf…

C語言試題六十五之請編寫函數實現猴子吃桃問題

??個人主頁:個人主頁 ??系列專欄:C語言試題200例目錄 ??推薦一款刷算法、筆試、面經、拿大公司offer神器 ?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 猴子吃桃問…

百度:病種類貼吧全面停止商業合作

新浪科技訊 1月12日上午消息&#xff0c; 百度今日就熱門疾病被出賣一事向新浪科技發布對外公告&#xff1a;病種類貼吧全面停止商業合作 只對權威公益組織開放。百度方面在公告中表示&#xff0c;為了規范具有明顯商業屬性貼吧的運營管理&#xff0c;并提升貼吧的內容質量和用…

【CSS動效實戰(純CSS與JS動效)】02 flex 布局實戰(仿 JD 及 gitCode 布局)及 media 自適應初探

一、flex 仿 JD 布局 首先&#xff0c;我們在編輯器中&#xff0c;寫上基礎代碼&#xff0c;當然要在 style 中加上一個 flex 類&#xff0c;用于 flex 布局的定義&#xff0c;這個是必然需要的&#xff0c;在此一定得加上。 <!DOCTYPE html> <html lang"en&qu…

C語言sin()函數繪制正弦曲線代碼(0-2π)

本文實現y=sin(x)正弦曲線在0-2π范圍內的曲線圖形,如下圖所示: 完整C語言代碼: #include<stdio.h> #include<math.h> main() {double y; int x,m,i; printf

MAUI模板項目閃退問題

MAUI模板項目閃退問題在MAUI最初發布的時候就曾創建過幾個模板項目進行體驗過&#xff0c;沒遇到什么坑。由于最近需要開發針對餐飲行業的收銀機&#xff08;安卓系統&#xff09;開發一款應用&#xff0c;這種收銀機一般配置不咋滴&#xff0c;系統版本和性能也肯定比不上我們…

真正CSDN博客文章一鍵轉載插件(含源碼)

插件地址&#xff1a;https://greasyfork.org/zh-CN/scripts/381053-csdn%E5%8D%9A%E5%AE%A2%E6%96%87%E7%AB%A0%E8%BD%AC%E8%BD%BD%E6%8F%92%E4%BB%B6 插件安裝使用說明請參閱&#xff1a;https://greasyfork.org/zh-CN 文章閱讀界面 文章發布頁面 源代碼 // UserScript //…

Kotlin之集合排序(sortBy、sortByDescending)

1、Kotlin的集合排序 如果我們需要對一個集合里面的某個對象的一個字段進行排序,java的話需要實現一個比較器Comparator,Kotlin的針對集合里面的某個對象的一個字段進行排序非常簡單,一行代碼搞定。 2、sortBy方法、sortByDescending方法 1)、sortBy升序排列 2)、sortBy…