Laravel如何实现从购物车中删除物品的功能?

时间:2020-07-01 23:52:06

标签: php laravel session cart shopping-cart

我必须删除购物车上的物品,并且令人惊讶的是,在实现销毁功能之后,Laravel并没有显示任何错误(我在php&laravel上非常乞gg)。但是按钮删除并不会执行任何操作。在点击网址时,创建一个像这样的令牌:

http://localhost:8000/cart?_token=9XiWI3YPPmkctOEPBsEoAyF4UeAkAG3hJLLXHTl9&_method=DELETE

查看:

@foreach($products as $product)
   <tr>
    <td><img src="{{ $product['item']['imagePath'] }}" class="img-cart"></td>
     <td><strong style="margin-top: 6px">{{ $product['item']['title'] }}</strong></td>
      <td>
       <form class="form-inline">
        <input class="form-control" type="text" value="{{ $product['qty'] }}" style="margin-right: 20px" >
         
              <form method="POST" action="{{ route('cart.destroy', ['id' => $product['item']['id']]) }}" > 
              @csrf
              {{ method_field('DELETE') }}
              <input type="submit" value="Delete" onclick="return confirm('Are you sure?')" class="btn btn-danger" />
                                        
              </form>
           </form>
         </td>
       <td>${{ $product['price'] }}</td>
     </tr>
@endforeach

路线:

Route::get('/add-cart/{id}', [
          'uses' => 'ProductController@getAddToCart',
          'as' => 'addToCart'
      ]);
Route::get('/cart', [
          'uses' => 'ProductController@getCart',
          'as' => 'shoppingCart'
      ]);
Route::get('/del/{id}', 'ProductController@destroy')->name('cart.destroy');

ProductController:

/**
    *@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]);
    }

    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');
    }

1 个答案:

答案 0 :(得分:0)

您的路线是获得而不是删除。应该是:

Route::delete('/del/{id}', 'ProductController@destroy')->name('cart.destroy');