首页 > 解决方案 > Laravel 错误:调用未定义的方法 App\Cart::delete()

问题描述

我正在尝试激活购物车(laravel 项目)上的删除按钮。实现功能破坏后,我面临错误Call to undefined method App\Cart::delete()。在我看来,我也尝试过{{ route('cart.destroy', ['id' => $product['item']['id']]) }}我的观点,但还是一样。似乎还可以,但我不知道该怎么做,我对此很感兴趣。

购物车:php

<?php

namespace App;

class Cart 
{
   public $items = null;
   public $totalQty = 0;
   public $totalPrice = 0;

   public function __construct($oldCart)
   {
     if ($oldCart) {
        $this->items = $oldCart->items;
        $this->totalQty = $oldCart->totalQty;
        $this->totalPrice = $oldCart->totalPrice;
     }
   }

   public function add($item, $id)
   {
     $storedItem = ['qty' => 0, 'price' => $item->price, 'item' => $item, 'imagePath' => $item->imagePath];

     if ($this->items ) {

            if (array_key_exists($id, $this->items)) {
                 $storedItem = $this->items[$id];
             }
         }
         $storedItem['qty']++;
         $storedItem['price'] = $item->price * $storedItem['qty'];
         $storedItem['imagePath'] = $item->imagePath;
         $this->items[$id] = $storedItem;
         $this->totalQty++;
         $this->totalPrice += $item->price;
    }
}

购物车控制器.php:

class ProductController extends Controller

{
    /**
    *@return \Illuminate\Http\Response
    */
    public function index()
    {
        $products = Product::all();
        return view('home', ['products'=> $products]);
    }

    public function getAddToCart(Request $request, $id) 
    {
        $product = Product::find($id);
        $oldCart = Session::has('cart') ? Session::get('cart') : null;
        $cart = new Cart($oldCart);
        $cart->add($product, $product->id);
        
        $request->session()->put('cart', $cart);
        return redirect()->route('home');
    }

    public function getCart()
    {
        if (!Session::has('cart')) {
            return view('cart');
        }
        $oldCart = Session::get('cart');

        $cart = new Cart($oldCart); 
        return view('cart', ['products' => $cart->items, 'totalPrice' => $cart->totalPrice]);
    }

    /**
     * Remove the specified resource from storage.
     * @param int $id
     * @return \Illuminate\Http\Request
     */
    public function destroy(Request $request, $id)
    {
        $oldCart = Session::has('cart') ? Session::get('cart') : null;
        $cart = new Cart($oldCart);
        $cart->delete($product, $product->id);
        $request->session()->put('cart', $cart);
        return redirect()->route('cart');
    }
}

购物车.blade.php:

<form method="POST" action="{{ route('cart.destroy', $product['item']['id']) }}" > 
           @csrf
           {{ method_field('DELETE') }}
    <input type="submit" value="Delete" onclick="return confirm('Are you sure?')" class="btn btn-danger" />
</form>

标签: phplaravelmethodsundefined

解决方案


添加来自@aynber的评论作为解决方案:您的购物车类中没有删除功能。您需要创建一个。


推荐阅读