Проверка массивов массивов - PullRequest
0 голосов
/ 14 декабря 2018

Я пытаюсь создать проверку для следующего запроса - данные, которые передаются в заданную конечную точку, должны быть массивом массивов, где каждый внутренний массив содержит line1 и postcode, а размер внешнего массива равен min:1.Так, например:

[
   ['line1' => 'foo', 'postcode' => 'bar'],
   ['line1' => 'baz', 'postcode' => 'qux']
]

- действительные данные для моего запроса, а:

[
   ['line1' => 'foo', 'postcode' => 'bar'],
   ['line1' => 'baz']
]

- нет.

Я создал класс проверки запроса сследующие правила:

public function rules()
{
    return [
        '*.line1' => 'string|required',
        '*.postcode' => 'string|required',
    ];
}

однако я не знаю, как добавить минимальное требование.Ни '*' => 'min:1', ни '' => 'min:1' не работают (я думаю, что первый должен теоретически работать, но я думаю, что он проверяет длину каждого поля, равную 1)

1 Ответ

0 голосов
/ 17 декабря 2018

В идеале вы должны добавить ключ, например

[ 'items' => [
       ['line1' => 'foo', 'postcode' => 'bar'],
       ['line1' => 'baz', 'postcode' => 'qux']
    ]
]

, а затем использовать 'items' => 'required|min:1'.

Если это невозможно, вы можете добавить after() метод к вашему запросу (я не сделал этого, поэтому не уверен, работает ли он):

public function withValidator($validator)
{
    $validator->after(function ($validator) {
        if (count($validator->getData())<1) {
            $validator->errors()->add('input', 'There must be at least one input');
        }
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...