[英]Input Arrays should contain at least one value in Laravel Validation
我在驗證時遇到問題,輸入 arrays 應至少包含一個值,例如,當我提交表單時,我得到以下輸入
array:26 [
"_token" => "GMPKHos9nnC6zw6UGN4nFKVEGd5PoEpDe9lEPETw"
"Customer" => "1"
"Text_From_Date" => "07 Jun 2021"
"From_Date" => "2021-06-07"
"Text_Due_Date" => "16 Jun 2021"
"Due_Date" => "2021-06-16"
"Invoice_Id" => "INV-1"
"Reference" => null
"Branding" => null
"Add_Currency" => null
"Tax_Type" => "ex_tax"
"Item" => array:5 [
0 => null
1 => null
2 => null
3 => null
4 => null
]
"Product_Description" => array:5 [
0 => null
1 => null
2 => null
3 => null
4 => null
]
"Quantity" => array:5 [
0 => null
1 => null
2 => null
3 => null
4 => null
]
"Unit_Price" => array:5 [
0 => null
1 => null
2 => null
3 => null
4 => null
]
"Discount" => array:5 [
0 => null
1 => null
2 => null
3 => null
4 => null
]
"Discount_Amount" => array:5 [
0 => null
1 => null
2 => null
3 => null
4 => null
]
"Account" => array:5 [
0 => null
1 => null
2 => null
3 => null
4 => null
]
"Tax_Rate" => array:5 [
0 => "0"
1 => "0"
2 => "0"
3 => "0"
4 => "0"
]
"Tax_Rate_Amount" => array:5 [
0 => null
1 => null
2 => null
3 => null
4 => null
]
"Region" => array:5 [
0 => null
1 => null
2 => null
3 => null
4 => null
]
"Amount" => array:5 [
0 => "0"
1 => "0"
2 => "0"
3 => "0"
4 => "0"
]
"Sub_Total" => "0"
"Total_Discount" => "0"
"Grand_Total" => "0"
"Form_Type" => "1"
]
這是 controller 中的驗證規則
public function save(Request $request)
{
$rules = [
'Customer' => 'required',
'Text_From_Date' => 'required',
'From_Date' => 'required|date',
'Text_Due_Date' => 'required',
'Due_Date' => 'required|date',
'Reference' => 'bail|nullable|string|min:3',
'Add_Currency' => 'bail|nullable',
'Tax_Type' => 'required',
'Product_Description.*' => 'exclude_if:Quantity.*,null|exclude_if:Unit_Price.*,null|required|max:1000',
'Item.*' => 'exclude_if:Quantity.*,null|exclude_if:Unit_Price.*,null|bail|nullable',
'Quantity.*' => 'exclude_if:Product_Description.*,null|required|numeric',
'Unit_Price.*' => 'exclude_if:Product_Description.*,null|required|numeric',
'Account.*' => 'exclude_if:Product_Description.*,null|required|numeric',
'Amount.*' => 'exclude_if:Product_Description.*,null|required|numeric',
'Sub_Total' => 'required|numeric',
'Total_Discount' => 'required|numeric',
];
$validator = Validator::make($request->all(), $rules);
if ($validator->fails()) {
return response()->json($validator->errors(), 422);
} else {
dd($validator->validated());
return response()->json('saved', 200);
}
}
arrays Item, Product_Description, Unit_Price, Quantity, Discount, Discount_Amount, Discount_Amount, Account, Tax_Rate, Tax_Rate_Amount, Region, Amount 應該至少有一個 notNull 值。
請幫助解決問題在此先感謝!
您可以使用自定義驗證。您可以創建自定義規則以保持代碼干凈。這只是一個片段
'Quantity' =>['required', function ($attribute, $value, $fail) {
if (is_array($value)&&!array_filter($value)) {
$fail('The '.$attribute.' is invalid.');
}
},],
例如,這里的數據包含數組中的所有 null 值所以拋出錯誤
Array
(
[data] => Array
(
[0] =>
[1] =>
)
)
驗證錯誤
Illuminate\Support\MessageBag Object
(
[messages:protected] => Array
(
[data] => Array
(
[0] => The data is invalid.
)
)
[format:protected] => :message
)
使用自定義驗證規則,並制定該規則:
<?php
namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
class NotEmptyArrayRule implements Rule
{
private string $key;
private string $value;
public function passes($attribute, $value): bool
{
// remove null items from collection.
$arr = collect($value)->filter();
return $arr->isNotEmpty();
}
public function message(): string
{
return 'Input array is empty.';
}
}
然后使用規則:
'Item' => [
'exclude_if:Quantity.*,null',
'exclude_if:Unit_Price.*,null',
'bail',
'nullable',
new NotEmptyArrayRule(),
]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.