12.thinkphp驗證

一.驗證器定義

1. 驗證器的使用,我們必須先定義它,系統提供了一條命令直接生成想要的類;

php think make:validate User

2. 這條命令會自動在應用目錄下生成一個validate文件夾,并生成User.php類;

class User extends Validate

3. 自動生成了兩個屬性:$rule表示定義規則,$message表示錯誤提示信息;

protected $rule = ['name'=>'require|max:20','price'=>//不得為空,不得大于20位
'number|between:1,100', //必須是數值,1-100 之間
'email'=>'email'];protected $message = ['name.require'=>'姓名不得為空','name.max'=>'姓名不得大于20位','price.number'=>'價格必須是數字','price.between'=>'價格必須1-100之間','email'=>'郵箱的格式錯誤'];

4. 如果不設置$message定義的話,將提示默認的錯誤信息;

5. 驗證器定義好了之后,我們需要進行調用測試,創建一個Verify.php控制器;

try {validate(User::class)->check(['name' => '蠟筆小新','price' => 90,'email' => 'xiaoxin@163.com']);} catch (ValidateException $e) {dump($e->getError());}

6. 默認情況下,出現一個錯誤就會停止后面字段的驗證,我們也可以設置批量驗證;

validate(User::class)->batch(true)...

由于出現一個錯誤,后面就會停止,使用我們要應用batch:

只能顯示一個錯誤,但是后面的兩個也是錯的。

下面這個圖片的batch位置寫錯了:

正確寫法:

7. 系統提供了常用的規則讓開發者直接使用,也可以自行定義獨有的特殊規則;

protected $rule = ['name'=>'require|max:20|checkName:李炎恢',];//自定義規則,名稱中不得是“李炎恢”protected function checkName($value, $rule){return $rule != $value ? true : '名稱存在非法稱謂';}

8. 對于自定義規則中,一共可以有五個參數,我們分別了解一下;

protected function checkName($value, $rule, $data, $field, $title){dump($data);//所有數據信息
dump($field);//當前字段名
dump($title);//字段描述,沒有就是字段名
}

1.?checkName方法參數傳值

  • $value:它代表的是被驗證字段的實際值。例如,若要驗證name字段,那么$value就是name字段在表單提交時所攜帶的值。
  • $rule:此為驗證規則中自定義規則之后的額外參數。就像'checkName:thinkphp'里,$rule的值就是thinkphp
  • $data:它是一個數組,包含了所有需要驗證的數據。默認值為空數組[],在驗證時,整個待驗證的數據數組會被傳遞給這個參數。

9. 如何設置字段描述,只要在字段名用|后設置即可: 'name|用戶名' => 'require|max:20|checkName:李炎恢',

<?php
namespace app\validate;use think\Validate;class User extends Validate
{protected $rule = ['name'  =>  'checkName:thinkphp','email' =>  'email',];protected $message = ['name'  =>  '用戶名必須','email' =>  '郵箱格式錯誤',];// 自定義驗證規則protected function checkName($value, $rule, $data=[]){return $rule == $value ? true : '名稱錯誤';}
}// 調用驗證類
$validate = new User();
$data = ['name' => 'thinkphp','email' => 'test@example.com'
];if (!$validate->check($data)) {dump($validate->getError());
} else {echo '驗證通過';
}

代碼解釋

  • 在上述代碼中,當調用$validate->check($data)時,name字段的值'thinkphp'會被傳遞給checkName方法的$value參數。
  • 'checkName:thinkphp'里的thinkphp會被傳遞給checkName方法的$rule參數。
  • 整個$data數組會被傳遞給checkName方法的$data參數。

這樣,在checkName方法中就能依據$value$rule的值進行驗證,并返回驗證結果。

驗證規則

有的時候只對數據進行局部的驗證,而不是全局。

1.在上一節驗證器定義的時候,我們采用的字符串模式,也支持數組模式;

protected $rule =['name' => ['require','max' => 10,'checkName' => '李炎恢'],'price' => ['number','between' => '1,100'],'email' => 'email'];

2.數組模式在驗證規則很多很亂的情況下,更容易管理,可讀性更高;

3.如果你想使用獨立驗證,就是手動調用驗證類,而不是調用User.php驗證類;

第一個是定義規則,第二個是驗證規則:

4.這種調用方式,一般來說,就是獨立、唯一,并不共享的調用方式;

$validate = Validate::rule(['name' => 'require|max:20','price' => 'number|between:1,100','email' => 'email']);$result =$validate->check(['name' => '李炎恢','price' => 90,'email' => 'xiaoxin163.com']);if(!$result){dump($validate->getError());}

5. 獨立驗證默認也是返回一條錯誤信息,如果要批量返回所有錯誤使用batch();

$result = $validate->batch(true)->check

6. 獨立驗支持對象化的定義方式,但不支持在屬性方式的定義;

$validate = Validate::rule(['name'=>ValidateRule::isRequire()->max(20),'price'=>ValidateRule::isNumber()->between([1, 100]),'email'=>ValidateRule::isEmail()]);

8. 獨立驗支持閉包的自定義方式,但這種方式會不支持字段的多規則;

$validate = Validate::rule(['name' => function ($value) {return $value != '' ? true : '姓名不得為空';},'price'=> function ($value) {return $value > 0 ? true : '價格不得小于零';}]);

二.錯誤信息

1. 獨立驗證的自定義錯誤提示,可以在方法的第二參數,參數一是規則;

ValidateRule::isEmail(null, '郵箱格式不正確!');ValidateRule::isNumber()->between([1, 100], '價格范圍1-100 之間')

2. 也可以獨立使用message()方法,來設置相關錯誤信息;

$validate->message(['name.require' => '姓名不得為空','name.max' =>'姓名不可以超過20個子']);'name.require'=>['code'=>1001, 'msg'=>'姓名不得為空']

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

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

相關文章

OpenWrt 與 Docker:打造輕量級容器化應用平臺技術分享

文章目錄 前言一、OpenWrt 與 Docker 的集成前提1.1 硬件與內核要求1.2 軟件依賴 二、Docker 環境部署與驗證2.1 基礎服務配置2.2 存儲驅動適配 三、容器化應用部署實踐3.1 資源限制策略3.2 Docker Compose 適配 四、性能優化與監控4.1 容器資源監控4.2 鏡像精簡策略 五、典型問…

EasyRTC音視頻實時通話嵌入式SDK,打造社交娛樂低延遲實時互動的新體驗

一、方案背景 在數字化時代&#xff0c;社交娛樂已經成為人們生活中不可或缺的一部分。隨著移動互聯網和智能設備的普及&#xff0c;用戶對實時互動的需求越來越高。EasyRTC作為一款基于WebRTC技術的實時音視頻通信解決方案&#xff0c;憑借其低延遲、高穩定性和跨平臺兼容性&…

軟件編程命名規范

編程命名規范是保證代碼可讀性、可維護性和團隊協作效率的重要基礎。以下是涵蓋主流編程語言的通用命名規范&#xff0c;結合行業最佳實踐和常見規范&#xff08;如Google、Microsoft、Airbnb等風格指南&#xff09;&#xff1a; 一、通用命名原則 清晰優先&#xff1a;名稱應…

換張電話卡能改變IP屬地嗎?一文解讀

在互聯網時代&#xff0c;IP屬地&#xff08;即網絡定位信息&#xff09;的顯示引發了許多用戶的關注。有人好奇&#xff1a;更換電話卡&#xff08;SIM卡&#xff09;是否能改變自己的IP屬地&#xff1f;本文將解析IP屬地的定義、電話卡的作用&#xff0c;并深入探討兩者之間的…

前端:純HTML、CSS和JS菜單樣式

實現了一個多級折疊菜單系統,使用純HTML、CSS和JavaScript(無任何框架) 一、二級菜單展開 1、實現效果 初始狀態-展示全部一級菜單 選中共狀態,一級標題選中共為藍色背景色,二級標題選中共為藍色文字,展開右側圖標為-,后縮狀態右側圖標為+ 2、實現 ??HTML結構?? …

Centos8 安裝 Docker

yum 更換國內源 1. 備份原 yum 配置 cd /etc/yum.repos.d/ mkdir backup mv *.repo backup/2. 下載新 yum 配置&#xff08;阿里源&#xff09; wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-8.repo3. 替換源中的系統版本變量 sed -…

AI測試工具Testim——告別自動化測試維護難題

隨著人工智能技術的快速發展&#xff0c;AI測試工具正在成為提升軟件研發效能的關鍵。每款AI的特性各有差異&#xff0c;今天&#xff0c;我們就給大家介紹一款專注于Web和移動應用的端到端的AI測試工具--Testim。 Testim的簡介 官網地址&#xff1a;https://www.testim.io/ 簡…

【默子AI】萬字長文:MCP與A2A協議詳解

【默子AI】萬字長文&#xff1a;MCP與A2A協議詳解 引言&#xff1a; 讓一個大模型憑空解決所有問題&#xff0c;就像讓一個書呆子不借助工具就去修汽車 即便他腦子里裝滿了理論知識&#xff0c;也缺少實踐的“手腳”。 長期以來&#xff0c;AI助手&#xff08;尤其是LLM&#x…

LeNet5 神經網絡的參數解析和圖片尺寸解析

1.LeNet-5 神經網絡 以下是針對 LeNet-5 神經網絡的詳細參數解析和圖片尺寸變化分析&#xff0c;和原始論文設計&#xff0c;通過分步計算說明各層的張量變換過程。 經典的 LeNet-5架構簡化版&#xff08;原始論文輸入為 32x32&#xff0c;MNIST 常用 28x28 需調整&#xff09…

第二節:文件系統

理論知識 文件系統的基本概念&#xff1a;文件系統是操作系統中負責管理持久數據的子系統&#xff0c;它將數據組織成文件和目錄的形式&#xff0c;方便用戶存儲和訪問數據。Linux文件系統的類型&#xff1a;常見的 Linux 文件系統類型有 Ext2、Ext3、Ext4、XFS、Btrfs 等。Ex…

Python數據結構與算法(5)——動態規劃

Python數據結構與算法(5)——動態規劃 0. 學習目標1. 動態規劃的基本概念1.1 什么是動態規劃1.2 動態規劃的核心思想1.3 動態規劃的適用條件2. 動態規劃的實現思路2.1 自頂向下:備忘錄法 (Memoization)2.2 自底向上:表格法(Tabulation)3. 0/1 背包問題4. 最長公共子序列5…

【JAVA ee初階】多線程(3)

一、出現線程安全的原因 1.【根本原因】線程的調度執行時隨機的&#xff08;搶占式執行&#xff09;->罪魁禍首 2.多個線程同時修改同一個變量 如果是一個線程修改一個變量 或者 多個線程讀取同一個變量 或者 多個線程修改不同變量 這些都沒事。 3.修改操作不是原子的&a…

Halcon 3D 表面匹配基于形狀

文章目錄 prepare_object_model_3d 準備 3D 物體模型read_shape_model_3d — 讀取3D匹配模型create_shape_model_3d 準備要匹配的3D模型find_shape_model_3d ——發現匹配模型project_shape_model_3d 將三維形狀模型的邊緣投影到圖像坐標中。示例ignore_part_polarity&#xff…

【Linux】Java 開發者的 Linux 常用命令指南

Java 開發者的 Linux 常用命令指南 目錄標題 Java 開發者的 Linux 常用命令指南1. Linux 目錄結構2. 系統信息命令3. 服務管理系統服務防火墻管理 4. 文本編輯 (vi/vim)常用模式 5. 文件和目錄操作查看與導航創建與刪除查看文件內容查找文件 6. 用戶管理7. 壓縮和解壓8. 權限管…

每日c/c++題 備戰藍橋杯(P1252洛谷 馬拉松接力賽)

洛谷P1060 馬拉松接力賽題解&#xff1a;貪心算法在資源分配中的巧妙應用 題目描述 P1060 馬拉松接力賽是一道結合貪心策略與動態規劃思想的資源分配問題。題目要求將25公里的馬拉松接力賽合理分配給5名選手&#xff0c;使得總耗時最短。每位選手可跑1-10公里的整數距離&…

Nginx 中間件

Nginx&#xff08;發音為 "engine-x"&#xff09;是一款開源的高性能 HTTP 服務器和反向代理服務器&#xff0c;最初由 Igor Sysoev 開發。 它以其高性能、穩定性、豐富的功能集和低資源消耗而聞名&#xff0c;廣泛應用于全球的 Web 服務架構中。 作為中間件&#…

Neo4j在win下安裝教程(docker環境)

1. 安裝命令 1.1 基于正式neo4j安裝–不用 docker run --name neo4j-container -p 7474:7474 -p 7687:7687 -d neo4j1.2 基于community安裝 需要部署兩個Neo4j&#xff0c;一個正式庫prod&#xff0c;一個測試庫dev。 neo4j默認監聽7474&#xff08;HTTP-也就是瀏覽器端口&…

kylin v10 + argo + ascend 310p多機多卡 pytorch distributed 訓練

最近接了個模型訓練編排多機多卡的改造需求&#xff0c;要求使用argo dag task啟動多個節點&#xff0c;同時多個節點能實現 torch.distributed.launch 這樣多機多卡的訓練模式 簡述技術 torch.distributed.launch命令介紹 我們在訓練分布式時候&#xff0c;會使用到 torch.d…

[Mac] 使用homebrew安裝miniconda

使用虛擬環境可以對不同項目的依賴進行隔離。可以使用venv或者conda來創建和使用虛擬環境。 venv是Python內置的虛擬環境管理模塊&#xff0c;適合純Python項目以及快速輕量級的開發和部署。conda具備更強大的版本管理能力&#xff0c;但是占用較大的磁盤空間。 考慮到我基本不…

CMU-15445(1)——環境搭建

前言 最近在找完暑期實習之后&#xff0c;終于有了一些干項目外的空余時間學習新的知識&#xff0c;在這么多輪面試中&#xff0c;數據庫的考察非常多&#xff0c;但孱弱的數據庫基礎導致我有很多次面試被問住&#xff0c;因此我希望在學習CMU-15445&#xff08;Fall 2024&…