Правильным способом было бы использовать метод sometimes()
в экземпляре валидатора, но вы не можете получить к нему доступ из Laravel Новых правил.
Вы можете просто определить rules
как замыкание, которое получает текущий входящий запрос и проверяет значение для динамического построения массива правил:
Laravel Решение коллекций
Text::make('Parent code', 'parent_code')
->hideFromIndex()
->rules(function ($request) {
// You could also use "->when(...)" instead of "->unless(...)"
// and invert the condition (first argument)
return collect(['required_if:level,2,4,6'])
->unless($request->level === 0, function ($rules) {
return $rules->push('exists:products,product_code');
})
->toArray();
}),
Лог c без использования коллекций то же самое, просто используйте basi c if для динамического добавления условий:
Обычный PHP Решение для массивов
Text::make('Parent code', 'parent_code')
->hideFromIndex()
->rules(function ($request) {
return [
'required_if:level,2,4,6',
($request->level !== 0) ? 'exists:products,product_code' : '',
];
}),
или (вариант ):
Text::make('Parent code', 'parent_code')
->hideFromIndex()
->rules(function ($request) {
$rules = ['required_if:level,2,4,6'];
if ($request->level !== 0) {
$rules[] = 'exists:products,product_code';
}
return $rules;
}),