Применить laravel правило проверки ко всем полям одновременно - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть входные данные, некоторые из них являются входными данными массива (например, <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);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...