Laravel 5.7. У меня есть запрос формы для модели Foo. В модели есть необязательное поле bar, которое должно быть массивом. Если он присутствует, он должен содержать два ключа: bing и bang. Но если массив отсутствует, очевидно, что эти два ключа не должны проверяться.

Это то, что я до сих пор:

return [
    'bar'      => 'bail|array|size:2',
    'bar.bing' => 'required|numeric',
    'bar.bang' => 'required|numeric',
];

Это работает, когда я отправляю запрос с массивом bar. Но когда я отправляю запрос без массива bar, я все равно получаю ошибки проверки

Поле bar.bing является обязательным.

Поле bar.bang обязательно для заполнения

Как я могу сделать их необходимыми, только когда присутствует bar?

1
GluePear 19 Сен 2018 в 16:39

2 ответа

Лучший ответ

Попробуйте по этим правилам

return [
    'bar'      => 'nullable|bail|array|size:2',
    'bar.bing' => 'required_with:bar|numeric',
    'bar.bang' => 'required_with:bar|numeric',
]

Документы для required_with

2
GluePear 19 Сен 2018 в 13:57

Вот что я обычно делаю в таких ситуациях

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;
}
0
Sebastian Sulinski 19 Сен 2018 в 13:48