Armin Rahmati
4 سال پیش توسط Armin Rahmati مطرح شد
0 پاسخ

آپلود چند تصویر برای محصول - گالری تصاویر

سلام دوستان.
من میخوام برای هر محصول به عنوان گالری، عکس هایی رو اضافه کنم.
کدهای مربوط به بلید:

<x-panel-layout>

    <x-slot name="scripts">
        <script>
            let createNewPic = ({ id }) => {
                return `
                    <div class="row image-field" id="image-${id}">
                        <div class="col-5">
                            <div class="form-group">
                                 <label>تصویر</label>
                                 <div class="input-group">
                                    <div class="input-group-append">
                                       <input type="file" class="form-control" name="images[${id}][image]">
                                    </div>
                                </div>
                            </div>
                        </div>
                         <div class="col-2">
                            <label >اقدامات</label>
                            <div>
                                <button type="button" class="btn btn-sm btn-warning" onclick="document.getElementById('image-${id}').remove()">حذف</button>
                            </div>
                        </div>
                    </div>
                `
            }

            $('#add_product_image').click(function() {
                let imagesSection = $('#images_section');
                let id = imagesSection.children().length;

                imagesSection.append(
                    createNewPic({
                        id
                    })
                );

            });
            $('#add_product_image').click();
        </script>
    </x-slot>
    <div class="content-wrapper">
    <div class="row">
        <div class="col-lg-12">
            <div class="card">
                <div class="card-header">
                    <h3 class="card-title">ثبت تصویر</h3>
                </div>
                <!-- /.card-header -->
                <!-- form start -->
                <form class="form-horizontal" action="{{ route('products.gallery.store' , ['product' => $product->id]) }}" method="POST" enctype="multipart/form-data">
                    @csrf

                    <div class="card-body">
                        <div id="images_section">

                        </div>
                        <button class="btn btn-sm btn-danger" type="button" id="add_product_image">تصویر جدید</button>
                    </div>
                    <!-- /.card-body -->
                    <div class="card-footer">
                        <button type="submit" class="btn btn-info">ثبت تصاویر</button>
                        <a href="{{ route('products.gallery.index' , ['product' => $product->id]) }}" class="btn btn-default float-left">لغو</a>
                    </div>
                    <!-- /.card-footer -->
                </form>
            </div>
        </div>
    </div>
    </div>

</x-panel-layout>

کنترلر مربوطه:

public function store(Request $request, Product $product)
    {
        $validated = $request->validate([
            'images.*.image' => 'required',
        ]);
        $image = $this->UploadGallery();
        $data = array_merge($validated, compact('image'));
        $product->gallery()->create($data);

        return redirect()->route('products.gallery.index' , ['product' => $product->id]);
    }

متد مربوط به آپلود عکس:

protected function UploadGallery($image = []) {
        $path = 'images/gallery';
        if (request()->has('images')) {
            $files = request()->file('images');
            foreach ($files as $file)
                $image[] = $file->store($path, 'public_files');
        }
        return $image;
    }

اما با ارور زیر مواجه میشم:

Call to a member function store() on array

ممنون میشم راهنمایی بفرمایید