Laravel验证数组中的所有图像(具有不同的输入名称)

时间:2018-05-17 11:59:05

标签: php laravel-5 laravel-validation laravel-request

当表单文件名总是不同时,如何为请求中的每个图像运行验证器。

我的表单文件名可以从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 :(得分:0)

我建议您将所有文件名更改为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...',
]);

答案 1 :(得分:0)

使用请求中存在的文件名构建自定义规则数组,并根据它验证请求。

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();
}

希望有所帮助......