Задача - если нет полей для изменения (с фронта не пришли поля из списка), вернуть ошибку с соответствующим текстом, что данные для изменения не переданы или т. п.
Попробовал через
required_without_all, но это не только выглядит костыльно, но и не работает с полями при передаче значения
nullable.
class DisheUpdateRequest extends FormRequest
{
public function rules()
{
return [
'category_id' => [
'required_without_all:'. $this->getWithoutName('category_id'),
'nullable',
'numeric',
Rule::exists('categories', 'id')->where(function ($query) {
# проверка принадлежности категории и блюда к одному меню
return $query->where('menu_id', $this->menu->id);
}),
],
'name' => ['required_without_all:'. $this->getWithoutName('name'), 'string', 'min:1', 'max:255'],
'description' => ['required_without_all:'. $this->getWithoutName('description'), 'nullable', 'string', 'min:1', 'max:255'],
'price' => ['required_without_all:'. $this->getWithoutName('price'), 'nullable', 'numeric', 'between:0,1000000'],
'photo' => ['required_without_all:'. $this->getWithoutName('photo'), 'nullable', 'image', 'mimes:jpg,png', 'max:10240'],
'order' => ['required_without_all:'. $this->getWithoutName('order'), 'numeric', 'min:0', 'max:32767'],
'active' => ['required_without_all:'. $this->getWithoutName('active'), 'boolean'],
];
}
public function getWithoutName(string $field)
{
return implode(',', array_diff(['category_id', 'name', 'description', 'price', 'photo', 'order', 'active'], [$field]));
}
protected function prepareForValidation()
{
$this->merge([
//
]);
}
public function failedValidation(Validator $validator)
{
throw new HttpResponseException(response()->json([
'success' => false,
'errors' => $validator->errors(),
])->setStatusCode(400));
}
}