#php #laravel #laravel-validation
#php #laravel #laravel-проверка
Вопрос:
У меня есть с массивом image_file ( image_file[1]
, image_file[2]
) . Они являются входными данными типа file . Эти изображения требуются, только если другой массив полей (proposition_type) определен на 2.
Например :
- если
proposition_type[1] == 2
,image_file[1]
должно быть заполнено ; - if
proposition_type[2] == 1
,image_file[2]
не должен быть заполнен.
Я попытался использовать следующие правила :
$rules = [
(...)
'image_file.*' => 'required_if:proposition_type.*,2|image',
];
Но возникает любая ошибка в полях image_file.
Более того, я использовал required
валидатор на своем image_file.*
и, опять же, ошибка не возникает.
Может быть, у кого-то есть решение для этого? Или, может быть, я делаю что-то не так? 🙂
Спасибо!
Комментарии:
1. Я думаю, вам нужно будет написать функцию для обработки этого. laravel.com/docs/5.6/validation#custom-validation-rules
2. Да! Спасибо, Майк 🙂
Ответ №1:
Если вы хотите создать более сложное условие для правила required_if, вы можете использовать метод Rule::RequiredIf . Этот метод принимает логическое значение или замыкание. При передаче замыкания замыкание должно возвращать true или false, чтобы указать, требуется ли поле для проверки. Что-то вроде этого может сработать для вас:
Validator::make($request->all(), [
'image_file[1]' => Rule::requiredIf(function () use ($request) {
if($request->proposition_type[1] == 2)
return true;
else
return false;
}),
'image_file[2]' => Rule::requiredIf(function () use ($request) {
if($request->proposition_type[2] == 1)
return false;
else
return true;
}),
]);
Комментарии:
1. Дело в том, что я не знаю, сколько image_file отправляется, Поэтому мне приходится генерировать таблицу динамически и т. Д… Спасибо за ответ.
Ответ №2:
Итак, что я сделал, наконец, это сгенерировал (точнее, завершил) мой массив правил на лету, создав while
и добавив запись массива для каждого изображения.
$i = 1;
$total_images = count($image_array);
while ($i <= $image_array)
{
$this->rules['image_file.'.$i] = 'nullable|required_if:proposition_type.'.$i.',2|image';
$i ;
}
Для этого, конечно, необходимо, чтобы ваша форма имела входные данные с image_file1
именами , image_file2
, … .
Надеюсь, это поможет другим!