您現在的位置是:首頁 > 棋牌
3分鐘短文|Laravel 表單驗證陣列的資料
- 由 程式設計師小助手 發表于 棋牌
- 2022-02-18
表單驗證最常見的幾種驗證情況
引言
本文說一個小的知識點,在表單驗證中,對陣列資料進行驗證, 我們需要進行兩項,一項是陣列本身的驗證,一項是陣列元素的驗證。
學習時間
例如有一個POST請求過來的資料,由3個數組組成,name,amount,description。三個欄位的驗證需求如下:
name欄位,必填,每個元素唯一,且至少有3個元素
amount欄位,必填,元素要求都是整數,且最少有1個元素
description欄位,必填,元素可有可無,且元素都是字串。
明確了需求,我們發現上述的驗證,laravel內建的規則基本可以解決。 只是對於欄位是陣列,且陣列長度滿足某些條件的要求,有些苛刻。 具體如何實現呢?
laravel表單驗證規則中,使用星號,可以匹配陣列的元素。那麼對於name欄位,我們的驗證規則是這樣的:
$validator = Validator::make($request->all(), [
“name” => “required|array|min:3”,
“name。*” => “required|string|distinct|min:3”,
]);
第一步驗證name必填,必須為陣列,且至少有3個元素;第二步,使用星號匹配所有的陣列元素, 必填,字串型別,唯一性。
那麼這樣,其他兩個欄位也很好實現了:
“amount” => “required|array|min:1”,
“amount。*” => “required|integer|min:1”,
“description” => “required|array”,
“description。*” => “required|string”,
前後端分離
對於當下前後端分離的開發模式,前端使用VUE網路請求傳遞過來的資料,如何驗證呢? 其實,如果相似的介面,上一節的方式也完全可用。 但我們討論一種更復雜一些的情形,比如表單傳遞過來的是這樣的陣列:
[0] => Array (
[item_id] => 1
[item_no] => 3123
[size] => 35
)
[1] => Array (
[item_id] => 2
[item_no] => 7688
[size] => 56
)
這是一個二維陣列,二維陣列內元素都是相同的鍵值對。那麼在laravel的驗證器中,應該如何寫呢?
這與指定了欄位名的陣列不同,這個陣列的鍵是自動編排的數字,所以,我們需要通配鍵名。驗證起來應該這樣的:
$this->validate($request, [
‘*。item_id’ => ‘required|integer’,
‘*。item_no’ => ‘required|integer’,
‘*。size’ => ‘required|max:191’,
]);
這樣就是針對所有陣列內指定的鍵的資料進行驗證了。
寫在最後
本文介紹了兩種表單格式的資料的驗證,一種是指定欄位名的一維陣列,一種是二維關聯陣列的驗證, 如果有條件的大家可以看一下框架在這種處理驗證規則的處理邏輯程式碼。
Happy coding :-)
我是@程式設計師小助手,持續分享程式設計知識,歡迎關注。