您好,登錄后才能下訂單哦!
這篇文章給大家介紹利用Laravel框架怎么實(shí)現(xiàn)一個表單驗(yàn)證功能,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
基礎(chǔ)驗(yàn)證例子
傳遞給 make 函數(shù)的第一個參數(shù)是待驗(yàn)證的數(shù)據(jù),第二個參數(shù)是對該數(shù)據(jù)需要應(yīng)用的驗(yàn)證規(guī)則。
多個驗(yàn)證規(guī)則可以通過 "|" 字符進(jìn)行隔開,或者作為數(shù)組的一個單獨(dú)的元素。
通過數(shù)組指定驗(yàn)證規(guī)則
一旦一個 Validator 實(shí)例被創(chuàng)建,可以使用 fails (或者 passes)函數(shù)執(zhí)行這個驗(yàn)證。
如果驗(yàn)證失敗,您可以從驗(yàn)證器中獲取錯誤消息。
您也可以使用 failed 函數(shù)得到不帶錯誤消息的沒有通過驗(yàn)證的規(guī)則的數(shù)組。
文件驗(yàn)證
Validator 類提供了一些驗(yàn)證規(guī)則用于驗(yàn)證文件,比如 size、mimes等。在驗(yàn)證文件的時候,您可以和其他驗(yàn)證一樣傳遞給驗(yàn)證器。
附帶錯誤消息
在一個 Validator 實(shí)例上調(diào)用 messages 函數(shù)之后,將會得到一個 MessageBag 實(shí)例,該實(shí)例擁有很多處理錯誤消息的方便的函數(shù)。
獲取一個域的第一個錯誤消息
獲取一個域的全部錯誤消息
獲取全部域的全部錯誤消息
檢查一個域是否存在消息
以某種格式獲取一條錯誤消息
注意: 默認(rèn)情況下,消息將使用與 Bootstrap 兼容的語法進(jìn)行格式化。
以某種格式獲取所有錯誤消息
錯誤消息 & 視圖
一旦您執(zhí)行了驗(yàn)證,您需要一種簡單的方法向視圖反饋錯誤消息。這在 Lavavel 中能夠方便的處理。以下面的路由作為例子:
注意當(dāng)驗(yàn)證失敗,我們使用 withErrors 函數(shù)把 Validator 實(shí)例傳遞給 Redirect。這個函數(shù)將刷新 Session 中保存的錯誤消息,使得在下次請求中能夠可用。
然而,注意我們沒有必要明確的在 GET 路由中綁定錯誤消息到路由。這是因?yàn)?Laravel 總會檢查 Session 中的錯誤,并自動綁定它們到視圖如果它們是可用的。所以,對于每個請求,一個 $errors 變量在所有視圖中總是可用的,允許您方便的認(rèn)為 $errors 總是被定義并可以安全使用的。$errors 變量將是一個 MessageBag 類的實(shí)例。
所以,在跳轉(zhuǎn)之后,您可以在視圖中使用自動綁定的 $errors 變量:
可用的驗(yàn)證規(guī)則
下面是一個所有可用的驗(yàn)證規(guī)則的列表以及它們的功能:
accepted
驗(yàn)證此規(guī)則的值必須是 yes、 on 或者是 1。這在驗(yàn)證是否同意"服務(wù)條款"的時候非常有用。
active_url
驗(yàn)證此規(guī)則的值必須是一個合法的 URL,根據(jù) PHP 函數(shù) checkdnsrr。
after:date
驗(yàn)證此規(guī)則的值必須在給定日期之后,日期將通過 PHP 函數(shù) strtotime 傳遞。
alpha
驗(yàn)證此規(guī)則的值必須全部由字母字符構(gòu)成。
alpha_dash
驗(yàn)證此規(guī)則的值必須全部由字母、數(shù)字、中劃線或下劃線字符構(gòu)成。
alpha_num
驗(yàn)證此規(guī)則的值必須全部由字母和數(shù)字構(gòu)成。
before:date
驗(yàn)證此規(guī)則的值必須在給定日期之前,日期將通過 PHP 函數(shù) strtotime 傳遞。
between:min,max
驗(yàn)證此規(guī)則的值必須在給定的 min 和 max 之間。字符串、數(shù)字以及文件都將使用大小規(guī)則進(jìn)行比較。
confirmed
驗(yàn)證此規(guī)則的值必須和 foo_confirmation 的值相同。比如,需要驗(yàn)證此規(guī)則的域是 password,那么在輸入中必須有一個與之相同的 password_confirmation 域。
date
驗(yàn)證此規(guī)則的值必須是一個合法的日期,根據(jù) PHP 函數(shù) strtotime。
date_format:format
驗(yàn)證此規(guī)則的值必須符合給定的 format 的格式,根據(jù) PHP 函數(shù) date_parse_from_format。
different:field
驗(yàn)證此規(guī)則的值必須與指定的 field 域的值不同。
email
驗(yàn)證此規(guī)則的值必須是一個合法的電子郵件地址。
exists:table,column
驗(yàn)證此規(guī)則的值必須在指定的數(shù)據(jù)庫的表中存在。
Exists 規(guī)則的基礎(chǔ)使用
指定列名
您也可以指定更多的條件,將以 "where" 的形式添加到查詢。
image
驗(yàn)證此規(guī)則的值必須是一個圖片 (jpeg, png, bmp 或者 gif)。
in:foo,bar,...
驗(yàn)證此規(guī)則的值必須在給定的列表中存在。
integer
驗(yàn)證此規(guī)則的值必須是一個整數(shù)。
驗(yàn)證此規(guī)則的值必須是一個合法的 IP 地址。
max:value
驗(yàn)證此規(guī)則的值必須小于最大值 value。字符串、數(shù)字以及文件都將使用大小規(guī)則進(jìn)行比較。
mimes:foo,bar,...
驗(yàn)證此規(guī)則的文件的 MIME 類型必須在給定的列表中。
MIME 規(guī)則的基礎(chǔ)使用
min:value
驗(yàn)證此規(guī)則的值必須大于最小值 value。字符串、數(shù)字以及文件都將使用大小規(guī)則進(jìn)行比較。
not_in:foo,bar,...
驗(yàn)證此規(guī)則的值必須在給定的列表中不存在。
numeric
驗(yàn)證此規(guī)則的值必須是一個數(shù)字。
regex:pattern
驗(yàn)證此規(guī)則的值必須符合給定的正則表達(dá)式。
注意: 當(dāng)使用 regex 模式的時候,有必要使用數(shù)組指定規(guī)則,而不是管道分隔符,特別是正則表達(dá)式中包含一個管道字符的時候。
required
驗(yàn)證此規(guī)則的值必須在輸入數(shù)據(jù)中存在。
required_if:field,value
當(dāng)指定的域?yàn)槟硞€值的時候,驗(yàn)證此規(guī)則的值必須存在。
required_with:foo,bar,...
僅當(dāng)指定的域存在的時候,驗(yàn)證此規(guī)則的值必須存在。
required_without:foo,bar,...
僅當(dāng)指定的域不存在的時候,驗(yàn)證此規(guī)則的值必須存在。
same:field
驗(yàn)證此規(guī)則的值必須與給定域的值相同。
size:value
驗(yàn)證此規(guī)則的值的大小必須與給定的 value 相同。對于字符串,value 代表字符的個數(shù);對于數(shù)字,value 代表它的整數(shù)值,對于文件,value 代表文件以KB為單位的大小。
unique:table,column,except,idColumn
驗(yàn)證此規(guī)則的值必須在給定的數(shù)據(jù)庫的表中唯一。如果 column 沒有被指定,將使用該域的名字。
Unique 規(guī)則的基礎(chǔ)使用
url
驗(yàn)證此規(guī)則的值必須是一個合法的 URL。
定制錯誤消息
如果有需要,您可以使用定制的錯誤消息代替默認(rèn)的消息。這里有好幾種定制錯誤消息的方法。
傳遞定制消息到驗(yàn)證器
注意: :attribute 占位符將被實(shí)際的進(jìn)行驗(yàn)證的域的名字代替,您也可以在錯誤消息中使用其他占位符。
其他驗(yàn)證占位符
有些時候,您可能希望只對一個指定的域指定定制的錯誤消息:
對一個指定的域指定定制的錯誤消息
在一些情況下,您可能希望在一個語言文件中指定錯誤消息而不是直接傳遞給 Validator。為了實(shí)現(xiàn)這個目的,請?jiān)?app/lang/xx/validation.php 文件中添加您的定制消息到 custom 數(shù)組。
在語言文件中指定錯誤消息
定制驗(yàn)證規(guī)則
Laravel 提供了一系列的有用的驗(yàn)證規(guī)則;但是,您可能希望添加自己的驗(yàn)證規(guī)則。其中一種方法是使用 Validator::extend 函數(shù)注冊定制的驗(yàn)證規(guī)則:
注冊一個定制的驗(yàn)證規(guī)則
注意: 傳遞給 extend 函數(shù)的規(guī)則的名字必須符合 "snake cased" 命名規(guī)則。
定制的驗(yàn)證器接受三個參數(shù):待驗(yàn)證屬性的名字、待驗(yàn)證屬性的值以及傳遞給這個規(guī)則的參數(shù)。
您也可以傳遞一個類的函數(shù)到 extend 函數(shù),而不是使用閉包:
注意您需要為您的定制規(guī)則定義錯誤消息。您既可以使用一個行內(nèi)的定制消息數(shù)組,也可以在驗(yàn)證語言文件中進(jìn)行添加。
您也可以擴(kuò)展 Validator 類本身,而不是使用閉包回調(diào)擴(kuò)展驗(yàn)證器。為了實(shí)現(xiàn)這個目的,添加一個繼承自 Illuminate\Validation\Validator 的驗(yàn)證器類。您可以添加在類中添加以 validate 開頭的驗(yàn)證函數(shù):
擴(kuò)展驗(yàn)證器類
下面,您需要注冊定制的驗(yàn)證器擴(kuò)展:
您需要注冊定制的驗(yàn)證器擴(kuò)展
當(dāng)創(chuàng)建一個定制的驗(yàn)證規(guī)則,您有時需要為錯誤消息定義一個定制的占位符。為了實(shí)現(xiàn)它,您可以像上面那樣創(chuàng)建一個定制的驗(yàn)證器,并且在驗(yàn)證器中添加一個 replaceXXX 函數(shù):
關(guān)于利用Laravel框架怎么實(shí)現(xiàn)一個表單驗(yàn)證功能就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。