流明无法验证文件数组

问题描述 投票:0回答:2

我使用Lumen 5.7创建了一个Web服务。

我正在发送一个文件数组,但我无法使用常用的方法验证它在Laravel / Lumen上验证数组:

public function create(Request $request) {
    $this->validate($request, [
        'phone_number' => 'required',
        'latitude' => 'required',
        'longitude' => 'required',
        'status' => 'required', Rule::in(['pre','authorized','archived']),
        'photos' => 'required',
        'photos.*' => 'mimes:jpg,jpeg,png,bmp'
    ]);
}

它似乎忽略了我在那里定义的photos规则。如果我做了d($request->all()),我得到了:

enter image description here

这意味着文件到达服务器,但无法验证它们。

这是我用来上传文件的html代码:

<!DOCTYPE html>
<html lang="en" dir="ltr">
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
        <form class="" action="terrains" method="post" enctype="multipart/form-data">
            <input type="file" name="photos[]" value="" multiple>
            <input type="submit" name="" value="Send">
        </form>
    </body>
</html>

我也用Postman测试了它:

enter image description here

如您所见,其他验证正在正确执行,但照片除外。

我需要验证,原因有以下几点:

  • 如果文件没有上传怎么办?
  • 如果他们的文件大于某些要求怎么办?
  • 如果他们不是我想要的mimetype怎么办?
laravel file validation multipartform-data lumen
2个回答
1
投票

我只会评论我添加的新字段,因为您已经了解了其他字段的用途。所以,进行以下编辑。

你的表格:

<form class="" action="terrains" method="post" enctype="multipart/form-data">
    <input type="text" name="phone_number" placeholder="Phone Number">
    <input type="text" name="longitude" placeholder="Longitude">
    <input type="text" name="latitude" placeholder="Latitude">
    <input type="text" name="status" placeholder="Status">
    <input type="file" name="photos[]" value="" multiple>
    <input type="submit" name="" value="Send">
</form>

验证:

public function create(Request $request) {
    $this->validate($request, [
        'phone_number' => 'required',   // required translates to the fact that the field must not be empty.
        'latitude' => 'required',
        'longitude' => 'required',
        'status' => 'required', Rule::in(['pre','authorized','archived']),
        'photos' => 'required',
        'photos.*' => 'image|max:5000|mimes:jpg,jpeg,png,bmp'    // image = Must be an image, max = The image size must not be bigger than the specified size (5MB)
    ]);
}

0
投票

它应该是这样的

public function create(Request $request) {
$this->validate($request, [
    'phone_number' => 'required',
    'latitude' => 'required',
    'longitude' => 'required',
    'status' => 'required', Rule::in(['pre','authorized','archived']),
    'photos.*' => 'required|mimes:jpg,jpeg,png,bmp'
]);

}

© www.soinside.com 2019 - 2024. All rights reserved.