У меня есть входные данные, некоторые из них являются входными данными массива (например, <input name="test[]">
), а некоторые являются обычными.
Поля имеют некоторые определенные c правила, но все они совместно используют 2 правила.
Я хочу, чтобы одно и то же правило проверки применялось ко всем полям, а не копировало одно и то же снова и снова для более 10 и более полей.
Я пытался:
$rules = [
'*.*' => ['max:100', new CustomRule], // Apply to all
'name1' => ['array'],
'name1.*' => ['specific_rule'],
]
но это не сработало, затем я переместил это *.*
на дно так:
$rules = [
'name1' => ['array'],
'name1.*' => ['specific_rule'],
'*.*' => ['max:100', new CustomRule], // Apply to all
]
, а потом вдруг это сработало!
Немного запутался, почему это не сработало сверху, и я не уверен, что это правильный способ сделать это.
Пожалуйста, сообщите.
Редактировать:
Все это (удалены некоторые из правила для упрощения):
$data = json_decode($request->getContent(), true);
$rules = [
'contact' => ['required', 'array'],
'contact.name' => ['required', 'string', 'max:255'],
'contact.email' => ['required', 'email', 'unique:users,email', 'max:255'],
'subscription' => ['required', 'array'],
'subscription.type' => ['nullable', 'integer'],
'*.*' => [new CustomRule], // Works when it's here, doesn't work on top, this is a Regex rule, looking for some invalid characters in all inputs.
];
$validator = Validator::make($data, $rules);
if($validator->fails())
{
return response()->json($validator->messages(), 400);
}