Chuyên mục Laravel

Bài 7: Sử dụng Ajax để thêm nhiều ảnh Sản phẩm trong Laravel

Đăng bởi: Minacode|Cập nhật:15-12-2023

Ok anh em, Ở bài trước mình đã hướng dẫn anh em thêm ảnh đại diện bằng Ajax trong Laravel rồi đúng không. Bài này mình hướng dẫn anh em thêm nhiều ảnh sản phẩm trong một dự án Laravel nhé! Let’s go thôi.

Tương tự như thêm ảnh đại điện các bạn thêm tho mình đoạn script Ajax sau vào file Js:

$('#files').on('change',()=>{
    var formData = new FormData()
    var files = $('#files')[0].files
    for (let index = 0; index < files.length; index++) {
        formData.append('files[]',files[index])
    }
    $.ajax({
        url:'/uploads',
        method: 'POST',
        dataType: 'JSON',
        data: formData,
        contentType: false,
        processData: false,
        success:function(result){
            if(result.success = true)
            {
                let url = window.location.hostname
                if(url.includes('minacode.net')) {
                    for (let index = 0; index < result.url.length; index++) {
                        let truePath =  "/public"+result.url[index] ;
                        html =''
                       html+=
                       '<img src="'+truePath+'" alt=""><input type="hidden" value="'+truePath+'" class="product-images" name="product_images[]">'
                       $('#input-file-imgs').html(html)
                    }
                }
                else {
                    html =''
                    for (let index = 0; index < result.url.length; index++) {
                       html+=
                       '<img src="'+result.url[index]+'" alt=""><input type="hidden" value="'+result.url[index]+'" class="product-images" name="product_images[]">'
                       $('#input-file-imgs').html(html)
                   
                    }
                }

            }
        }
    })
})

 

Trong đoạn code trên mình có sự dụng:

 window.location.hostname 

Mục đích để có thể chuyển qua chuyển lại giữa môi trường local và servel mà không cần thay đổi lại cái path của ảnh. 

Tại sao lại phải như vậy? 

Đó là vì cái đường dẫn public_path của laravel server khi bạn golive project  sẽ khác nhau. Khúc này mà bạn nào đã từng cho cái project của mình lên hosting sẽ có cái nhìn rõ hơn nhé!

Code giao diện thêm ảnh sản phẩm của mình trong trường hợp này sẽ như sau:

   <div class="input-file">
       <label id="files-label" for="files"><i class="ri-file-image-line"></i>Ảnh Sản Phẩm</label>
       <input type="file" id="files" multiple>
       <div class="input-file-imgs" id="input-file-imgs">
       </div>
     </div>

Bài trước chúng ta đã tạo cho nó một controller có tên là UploadController rồi đúng không. Các bạn thêm cho mình method sau để xử lý việc thêm nhiều ảnh sản phẩm nhé

  public function uploads'(Request $request){
        $files = $request -> file('files');
       for ($i=0; $i < count($files) ; $i++) { 
        $fileName =time().'-'.$files[$i]->getClientOriginalName();
        $files[$i] -> storeAs('/public/images',$fileName);
        $url[] = '/storage/images/'.$fileName;
        
       }
       return response() -> json([
        'success' => true,
        'url' => $url

    ]);
    
    }

 

Đừng quên tạo cho em nó một route nhé:

Route::post('/uploads',[UploadController::class,'uploads']);

Và đừng quên:

php artisan optimize:clear

OK, bây giờ thì các bạn thử kiểm tra xem nào. Quá ngon lanh rồi đúng không. Hẹn gặp lại các bạn nhé!

Để Lại Ý Kiến Của bạn!
Bài Viết Chuyên Mục


Khóa Học Miễn Phí

IvyModa

FullStack

Chi tiết

Tạo tính năng CRUD với Livewire Laravel

FullStack

Chi tiết

Php-MySqli-DataBase Cơ Bản

FullStack

Chi tiết
Về MinaCode
Đọc Thơ Nhân Kỷ Niệm 10 Năm Thành Lập MB Nam Đà Nẵng

Banker To Coder

Hi All,


Nguyên đây! MinaCode là website mình tạo ra với mong muốn chia sẻ chút kiến thức liên quan đến lập trình FullStack.

Ngôn ngữ lập trình chủ yếu được sử dụng là Htm, Css, Javascript, Php cùng một số thư viện như Jquery, Fontawesome... Phía Frontend và Farmework Laravel phía Backend.

Mình chưa bao giờ tham gia bất cứ một trường lớp nào về lập trình. Tất cả kiến thức mình chia sẻ đều là trên tình thần tự học. Do đó:

+ MinaCode phù hợp với những tay ngang, xem lập trình như là một kỹ năng bổ trợ trong công việc hay là một kênh kiếm thêm thu nhập từ những very mini projects.

+ MinaCode không phù hợp với những bạn đang được đào tạo bài bản, chính quy.

Mình tin rằng, Trong tương lai không xa. Lập trình sẽ trở nên một kỹ năng không thể thiếu đối với các bạn trẻ.

Cuối cùng thì Ngôn ngữ lập trình không quan trọng bằng Tư duy lập trình. Mình chúc các bạn sẽ có được những kiến thức bổ ích với MinaCode.

--Ngô Sỹ Nguyên--

Coming Soon