Laravel 5 中的图像数组验证

Posted

技术标签:

【中文标题】Laravel 5 中的图像数组验证【英文标题】:Image array validation in Laravel 5 【发布时间】:2015-10-10 15:11:54 【问题描述】:

我的应用程序允许用户同时上传多个图像文件,但是我不知道如何验证图像数组。

$input = Request::all();

    $rules = array(
        ...
        'image' => 'required|image'
    );

    $validator = Validator::make($input, $rules);

    if ($validator->fails()) 

        $messages = $validator->messages();

        return Redirect::to('venue-add')
            ->withErrors($messages);

     else  ...

此验证将失败,因为'image' 是一个数组,如果我将验证规则更改为:

    $rules = array(
        ...
        'image' => 'required|array'
    );

验证会通过,但是数组里面的图片还没有被验证过。

This answer 使用关键字 each 来为验证规则添加前缀,但在 laravel 4.2 中,这在 Laravel 5 中似乎不起作用。

我一直在尝试遍历数组并分别对每个图像进行验证,但是是否有内置函数可以为我执行此操作?

【问题讨论】:

【参考方案1】:

这对我有用

$rules = array(
     ...
     'image' => 'required',
     'image.*' => 'image|mimes:jpg,jpeg'
);

按这个顺序做。

【讨论】:

【参考方案2】:

我使用了类似于 Jeemusu 推荐的技术,在初始验证以确保图像数组存在之后,使用第二个验证器迭代数组,确保数组中的每个项目实际上都是图像。代码如下:

$input = Request::all();

$rules = array(
    'name' => 'required',
    'location' => 'required',
    'capacity' => 'required',
    'description' => 'required',
    'image' => 'required|array'
);

$validator = Validator::make($input, $rules);

if ($validator->fails()) 

    $messages = $validator->messages();

    return Redirect::to('venue-add')
        ->withErrors($messages);



$imageRules = array(
    'image' => 'image|max:2000'
);

foreach($input['image'] as $image)

    $image = array('image' => $image);

    $imageValidator = Validator::make($image, $imageRules);

    if ($imageValidator->fails()) 

        $messages = $imageValidator->messages();

        return Redirect::to('venue-add')
            ->withErrors($messages);

    

【讨论】:

【参考方案3】:

同意@Badmus Taofeeq 的回答,但它将接受具有任何值的图像字段,而无需检查字段是否为数组。你需要添加一些小东西

请参阅下面的代码以进行正确的验证

$rules = array(
     'image' => 'required|array',
     'image.*' => 'image|mimes:jpg,jpeg'
);

【讨论】:

以上是关于Laravel 5 中的图像数组验证的主要内容,如果未能解决你的问题,请参考以下文章

Laravel5 中的图像大小验证

在laravel 5.2中以编辑形式进行图像验证

Laravel 5.5 - 图像验证不起作用

Laravel 5.4:如何验证图像大小?

Laravel 5 - 图像验证不起作用

如何修复“文件上传失败。”使用任何图像上传验证时出错 - Laravel 5.7