laravel-5.8: недопустимый аргумент для foreach ()

привет, я создаю форму для загрузки фотографий в Laravel, но когда я открываю форму, появляется ошибка: недопустимый аргумент для foreach ()

файл лезвия:

<form method="POST" action="{{ route('admin.product.alternateimages') }}" enctype="multipart/form-data" class="add-new-post">
    @csrf
    <strong class="text-muted d-block mb-2 mt-5">Upload Product Image</strong>
    <div class="input-group mb-3">
      <div class="input-group input-group-seamless">
        <input type="file" name="product_alt_img[]" class="form-control mb-2 btn btn-sm btn-outline-primary mr-1 @error('product_image') is-invalid @enderror" value="{{ old('product_image') }}" id="" placeholder=""> </div>
        @error('product_image')
          <div class="small text-danger">{{ $message }}</div>
        @enderror
    </div>
</form>

функция:

    public function alternateimages(Request $request)
    {
        $altimgs = new Product;
        $altimgs->product_id = $request->product_id;
        $files = $request->file('product_alt_img');
        foreach ($files as $file) {
          $images = $file->getClientOriginalName();
          $file->move(public_path('images/backend_images/product_images'), $images);
          $altimgs->product_alt_img = $images;
        }
        $altimgs->save();

        return redirect()->back()->with('flash_message_success', 'Product Images has been added successfully');   
    }

person pro    schedule 31.08.2019    source источник
comment
на основании этого product_alt_img[] похоже, вы пытаетесь загрузить несколько файлов? Если да, добавьте цикл foreach внутри метода alternateimages, я думаю, что $ paths возвращает массив изображений, поэтому вам нужно перебирать его и обрабатывать каждый файл отдельно.   -  person Vipertecpro    schedule 31.08.2019
comment
Недействительный аргумент для foreach ()   -  person pro    schedule 31.08.2019
comment
альтернативные изображения публичной функции (запрос $ request) {$ altimgs = новый продукт; $ altimgs- ›product_id = $ request-› product_id; $ files = $ request- ›file ('product_alt_img'); foreach ($ files as $ file) {$ images = $ file- ›getClientOriginalName (); $ file- ›move (public_path ('images / backend_images / product_images'), $ images); $ altimgs- ›product_alt_img = $ images; } $ altimgs- ›save (); return redirect () - ›back () -› with ('flash_message_success', 'Изображения продукта были успешно добавлены'); }   -  person pro    schedule 31.08.2019
comment
Я добавил цикл foreach, но теперь он говорит, что для foreach () указан недопустимый аргумент.   -  person pro    schedule 31.08.2019
comment
в некоторых случаях ваши переменные $ files могут быть нулевыми, попробуйте foreach ($files??[] as $file)   -  person Soheil Rahmat    schedule 31.08.2019
comment
Пожалуйста, войдите в чат для дальнейшего обсуждения, чтобы мы могли решить его как можно скорее. @pro   -  person Vipertecpro    schedule 01.09.2019
comment
@Vipertecpro на самом деле я пытаюсь добавить альтернативные изображения к продуктам, чего не происходит.   -  person pro    schedule 01.09.2019
comment
как присоединиться к чату, потому что его ссылка не появляется   -  person pro    schedule 01.09.2019
comment
Здесь chat.stackoverflow.com/rooms/198757/   -  person Vipertecpro    schedule 01.09.2019


Ответы (1)


Возможно, вам придется изменить product_alt_img[] на product_alt_img, если вы загружаете один файл.

<input type="file" name="product_alt_img" class="form-control mb-2 btn btn-sm btn-outline-primary mr-1 @error('product_image') is-invalid @enderror" value="{{ old('product_image') }}" id="" placeholder="">

В противном случае, если вы хотите загрузить несколько файлов, вам, возможно, придется изменить метод вашего контроллера.

 public function alternateimages(Request $request)
{
    $altimgs = new Product;
    $altimgs->product_id = $request->product_id;

    //fetch an array of product_alt_img
    $files = $request->product_alt_img;

    //go over each Illuminate\Http\UploadedFile instance
    foreach($files as $file)
    {
        $image = $file->getClientOriginalName();

        ....
    }

    ....  
}

NB: более красноречивое решение - иметь отдельную таблицу для хранения изображений товаров.

person Emeka Mbah    schedule 31.08.2019
comment
Я хочу загрузить несколько фото, как модифицировать контроллер - person pro; 31.08.2019
comment
Недействительный аргумент для foreach () - person pro; 31.08.2019
comment
альтернативные изображения публичной функции (запрос $ request) {$ altimgs = новый продукт; $ altimgs- ›product_id = $ request-› product_id; $ files = $ request- ›file ('product_alt_img'); foreach ($ files as $ file) {$ images = $ file- ›getClientOriginalName (); $ file- ›move (public_path ('images / backend_images / product_images'), $ images); $ altimgs- ›product_alt_img = $ images; } $ altimgs- ›save (); return redirect () - ›back () -› with ('flash_message_success', 'Изображения продукта были успешно добавлены'); } - person pro; 31.08.2019
comment
Недействительный аргумент для foreach () - person pro; 31.08.2019
comment
Я изменил свой ответ `$ paths = $ request-› product_alt_img` ... это должно быть ваше имя поля name="product_alt_img[]", так как его несколько файлов - person Emeka Mbah; 31.08.2019
comment
он по-прежнему говорит: недопустимый аргумент для foreach () - person pro; 31.08.2019
comment
это должно быть ваше имя поля name = product_alt_img [], так как это несколько файлов .. попробуйте проверить содержимое dd($request->product_alt_img) - person Emeka Mbah; 31.08.2019
comment
попробуйте dd($request->all()) проверить содержимое product_alt_img - person Emeka Mbah; 31.08.2019
comment
Позвольте нам продолжить это обсуждение в чате. - person Emeka Mbah; 31.08.2019