Проверить наличие вложенного значения в 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
?
1 ответ
Вы можете добавить хуки после в запрос формы, просто переопределив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!');
}
});
}
Примечание: я еще не тестировал это полностью, но это дает вам представление.