Laravel 5.7. У меня есть форма запроса проверки для модели Foo. В модели есть необязательное поле bar, которое должно быть массивом. Если он присутствует, он должен содержать два ключа, bing и bang. Но если массив отсутствует, очевидно, что эти два ключа не должны проверяться.
Вот что у меня есть на данный момент:
return [
'bar' => 'bail|array|size:2',
'bar.bing' => 'required|numeric',
'bar.bang' => 'required|numeric',
];
Это работает, когда я отправляю запрос с присутствующим массивом bar. Но когда я отправляю запрос без массива bar, я все равно получаю ошибки проверки
The bar.bing field is required
The bar.bang field is required
Как сделать так, чтобы они требовались только при наличии bar?






Вот что я обычно делаю в таких ситуациях
public function rules(): array
{
$rules = [
// ...
];
if ($this->bar) {
$rules['bar'] = 'array|size:2';
$rules['bar.bing'] = 'required|numeric';
$rules['bar.bang'] = 'required|numeric';
}
return $rules;
}
Вы можете попробовать условное правило sometimes, но я никогда не пробовал использовать ключи массива и не видел подходов к инкапсуляции для такого рода сценариев.
Попробуйте по этим правилам
return [
'bar' => 'nullable|bail|array|size:2',
'bar.bing' => 'required_with:bar|numeric',
'bar.bang' => 'required_with:bar|numeric',
]
Документы для required_with
Спасибо, работает отлично. Я отредактировал ваш ответ, чтобы добавить ссылку на документы.
Спасибо за ответ. Я думал об этом, но мне бы понравилось, если бы был более инкапсулированный способ сделать это.