![](/img/trans.png)
[英]How to check if validation fail when using form-request in Laravel?
[英]Check existence of nested value in Laravel Form Request Validation
我有以下驗證規則:
[
MenuItem::MENU_ITEM_NAME => 'required|unique:menu_items,name',
MenuItem::MENU_ITEM_DESCRIPTION => 'nullable',
MenuItem::MENU_ITEM_CATEGORY => 'required|exists:categories,id',
MenuItem::MENU_ITEM_SIDE => 'nullable|boolean',
MenuItem::MENU_ITEM_SIDE_ONLY => 'nullable|boolean',
MenuItem::MENU_ITEM_IMAGE => 'nullable',
MenuItem::MENU_ITEM_AVAILABLE => 'nullable|boolean',
MenuItem::MENU_ITEM_ACTIVE => 'nullable|boolean',
MenuItem::MENU_ITEM_PRICING => 'required',
]
他們工作正常,直到我需要實現這個測試用例:
定價又名MenuItem::MENU_ITEM_PRICING
是一個數組數組。 我需要檢查當MenuItem::MENU_ITEM_SIDE
被傳遞為true
, pricing
數組必須包含一個子數組,其中包含該特定項目的一些值。
前任:
[
MenuItem::MENU_ITEM_SIDE => false,
MenuItem::MENU_ITEM_PRICING => []
]
前面的例子是有效的。 但:
[
MenuItem::MENU_ITEM_SIDE => true,
MenuItem::MENU_ITEM_PRICING => []
]
無效,應該是:
[
MenuItem::MENU_ITEM_SIDE => false,
MenuItem::MENU_ITEM_PRICING => [['sideprice' => 2.20]]
]
我如何檢查(在我的FormRequest
類中)如果MenuItem::MENU_ITEM_SIDE == true
那么MenuItem::MENU_ITEM_PRICING
應該包含一個名為sideprice
的鍵的子sideprice
?
您可以在表單請求中添加after 鈎子,只需像這樣覆蓋withValidator
方法:
/**
* Configure the validator instance.
*
* @param \Illuminate\Validation\Validator $validator
* @return void
*/
public function withValidator($validator)
{
// Check using `sometimes` method
$validator->sometimes("{MenuItem::MENU_ITEM_PRICING}.*.sideprice", 'required', function ($input) {
return $input->${MenuItem::MENU_ITEM_SID};
});
// Or check using `after` method
$validator->after(function ($validator) {
if ($this->input(MenuItem::MENU_ITEM_SID, false)
&& ! \Illuminate\Support\Arr::has($this->input(MenuItem::MENU_ITEM_PRICING, []), '*.sideprice')) {
$validator->errors()->add('field', 'Something is wrong with this field!');
}
});
}
注意:我還沒有完全測試過這個,但它給了你這個想法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.