Как удалить изображение с помощью ajax в laravel - PullRequest
1 голос
/ 23 октября 2019

Я пытаюсь удалить запись из моей таблицы продуктов, у каждого продукта есть изображение. Я не знаю, как удалить изображение из файла, в котором оно хранится.

Product.js

$(document).ready(function() {    

    $("#btn-delete").click(function() {
        $.ajaxSetup({
            headers: {
                'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
            }
        });
        $.ajax({
            type: 'DELETE',
            url: '/product/' + $("#frmDeleteProduct input[name=product_id]").val(),
            dataType: 'json',
            success: function(data) {
                $("#frmDeleteProduct .close").click();
                window.location.reload();
            },
            error: function(data) {
                console.log(data);
            }
        });
    });
});

function deleteProductForm(product_id) {
    $.ajax({
        type: 'GET',
        url: '/product/' + product_id,
        success: function(data) {
            $("#frmDeleteProduct #delete-title").html("¿Do you want to delete this product (" + data.products.name + ")?");
            $("#frmDeleteProduct input[name=product_id]").val(data.products.id);
            $('#deleteProductModal').modal('show');
        },
        error: function(data) {
            console.log(data);
        }
    });
}

ProductController.php

Я прочитал, что мне нужно поместить что-то подобное в мой контроллер File::delete('img/products/' . $image);, но я не знаю, как сейчас.

public function destroy($id)
    {

        //File::delete('img/products/' . $image); 
        $products = Product::destroy($id);

        return response()->json([
            'error' => false,
            'products'  => $products,
        ], 200);
    }

1 Ответ

0 голосов
/ 23 октября 2019

Вам необходимо передать в качестве параметра File::delete() полный путь, когда ваше изображение было сохранено. Например, если ваши изображения были в пути хранения laravel в подкаталоге img/products/, а имя изображения - это идентификатор продукта с расширением .jpg, вы можете сделать это:

public function destroy($id)
{
    $fullImgPath = storage_path("img/products/$id.jpg");
    if(File::exists($fullImgPath)) {
        File::delete($fullImgPath);
    }

    $products = Product::destroy($id);

    return response()->json([
        'error' => false,
        'products'  => $products,
    ], 200);
}

Но если у вас есть имя изображения в вашей Product модели, вы можете сделать это:

public function destroy($id)
{
    $product = Product::find($id);

    $fullImgPath = storage_path("img/products/".$product->image_name);
    if(File::exists($fullImgPath)) {
        File::delete($fullImgPath);
    }

    $product->delete();

    return response()->json([
        'error' => false,
        'products'  => $product->id,
    ], 200);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...