Laravel проверяет все изображения в массиве (с разными входными именами) - PullRequest
0 голосов
/ 17 мая 2018

Как запустить валидатор для каждого изображения в запросе, когда имена файлов форм всегда разные.

Имена файлов моих форм могут варьироваться от file1 до section_1_image[0][].

Мне нужно создать проверку, которую я могу вставить в каждый контроллер, который проверяет почтовый запрос и проверяет ВСЕ файлы, если он у них есть

Это то, что у меня есть

    $validator = Validator::make($request->all(), [
        'items' => 'array',
    ]);

    $validator->each('items', [
        '*'       => 'max:50'
    ]);

    if ($validator->fails()) {
        echo 'Error';
        exit;
    }

Но это, похоже, ничего не делает, просто игнорируется?

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Создается пользовательский массив правил с именами файлов, которые присутствуют в запросе, и запрос проверяется по нему.

use Illuminate\Support\Facades\Input;

//code

$rule = [];

foreach (Input::file() as $key => $value) {
    $rule = $rule + [$key => 'max:50'];
}

$validator = Validator::make($request->all(), $rule);

if ($validator->fails()) {
    //validation failed
    //custom error message common for all file(optional)
    $validator->errors()->add('image_size_error', 'Images size exceeds!');

    return redirect()
                ->back()
                ->withErrors($validator)
                ->withInput();
}

Надеюсь, это поможет ..

0 голосов
/ 17 мая 2018

Я бы посоветовал вам изменить имя всех ваших файлов на что-то вроде files[ file_name]

<input type="file" name="files[first]">
<input type="file" name="files[section_1_image]">

чтобы в каждом контроллере было

$validator = Validator::make($request->all(), [
    ...
    'files.*' => 'file_rules...',
]);
...