【发布时间】:2021-08-24 16:41:17
【问题描述】:
我遇到了验证问题, 输入数组应至少包含一个值 例如,当我提交表单时,我得到以下输入
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"
]
这是控制器中的验证规则
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);
}
}
数组 Item , Product_Description, Unit_Price , Quantity , Discount , Discount_Amount , Discount_Amount , Account , Tax_Rate , Tax_Rate_Amount , Region , Amount 应该至少有一个 notNull 值。
请帮助解决问题提前谢谢!
【问题讨论】:
-
你可以使用:"Product_Description.0" => "required",见:stackoverflow.com/a/57200746/10573560
-
@OMR 我认为这行不通,他将数组作为键对值传递,所以它会说元素存在,我之前遇到过类似的事情,我最终创建了一个自定义验证器,这将非常有用,因为这种情况会重复多次。
-
@OMR 我不想只填充第一个数组元素,其中任何可以填充的元素都将被排除在外。
标签: php laravel laravel-validation