Lumen не может проверить массив файлов - PullRequest
0 голосов
/ 18 сентября 2018

Я создал веб-сервис, используя Lumen 5.7 .

Я отправляю массив файлов, но не могу проверить его, используя общеизвестный метод проверки массивов в Laravel /Люмен:

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 голосов
/ 18 сентября 2018

Я буду комментировать только новые поля, которые я добавил, поскольку вы уже понимаете, что делают другие поля.Итак, сделайте следующее редактирование.

Ваша форма:

<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 голосов
/ 18 сентября 2018

Так и должно быть

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'
]);

}

...