流明无法验证文件数组

时间:2018-09-18 17:12:40

标签: laravel file validation multipartform-data lumen

我使用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>

我还使用邮递员对其进行了测试:

enter image description here

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

由于几个原因,我需要验证:

  • 如果没有上传文件怎么办?
  • 如果文件大于某些要求怎么办?
  • 如果他们不在我想要的模仿类型中怎么办?

2 个答案:

答案 0 :(得分: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)
    ]);
}

答案 1 :(得分: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'
]);

}