Самый короткий подход, который я мог бы получить к работе, таков:
"items" => "required|array",
"items.*.age" => "required|integer",
"items.*.father" => "required_if:object.*.age,".implode(",",range(0,18))."|min:5"
Когда бы ни понадобился отец для этого человека, он должен иметь как минимум 5 символов.Отец нужен, когда возраст человека меньше 18 лет.
required_if
работает с несколькими уравнениями, разделенными запятыми.Поэтому я написал 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18
как implode(',',range(0,18))
, чтобы получить эту часть.
Используемая мной тестовая установка:
Контроллер (используется HomeController)
function posttest(Request $request) {
$validator = Validator::make($request->all(), [
"object" => "required|array",
"object.*.age" => "required|integer",
"object.*.father" => "required_if:object.*.age,".implode(",",range(0,18))."|min:5"
]);
if($validator->fails()){
dd($validator->errors());
}
}
Просмотр (тест.blade.php)
@extends('layouts.app')
@section('content')
<form action="{{URL::to("/posttest")}}" method="POST">
@csrf
<input type="number" name="object[0][age]" value="12">
<input type="text" name="object[0][father]" value="John">
<input type="number" name="object[1][age]" value="15">
<input type="text" name="object[1][father]" value="John Doe">
<input type="number" name="object[2][age]" value="17">
<input type="submit" value="gönder">
</form>
@endsection
Маршруты
Route::view("/test", "test");
Route::post('/posttest', "HomeController@posttest");