404 加入购物车 laravel

404 on add to cart laravel

我在添加到购物车时遇到这种情况,当我想添加到购物车时出现 404 错误,

这是我的路线

Route::get('/add-to-cart/{product}', [CartController::class, 'addToCart'])->name('add.cart');
Route::get('/remove/{id}', [CartController::class, 'removeFromCart'])->name('remove.cart');
Route::get('/change-qty/{product}', [CartController::class, 'changeQty'])->name('change_qty');

这是控制器 命名空间 App\Http\Controllers;

use Illuminate\Http\Request;

use App\Models\Products;

class CartController extends Controller
{
/**
 * Display a listing of the resource.
 *
 * @return \Illuminate\Http\Response
 */
public function index()
{
    //
    return view('cart.index');
}

public function addToCart(Products $product)
{
    $cart = session()->get('cart');
    if (!$cart) {
        $cart = [$product->id => $this->sessionData($product)];
        return $this->setSessionAndReturnResponse($cart);
    }
    if (isset($cart[$product->id])) {
        $cart[$product->id]['quantity']++;
        return $this->setSessionAndReturnResponse($cart);
    }
    $cart[$product->id] = $this->sessionData($product);
    return $this->setSessionAndReturnResponse($cart);

}

public function changeQty(Request $request, Products $product)
{
    $cart = session()->get('cart');
    if ($request->change_to === 'down') {
        if (isset($cart[$product->id])) {
            if ($cart[$product->id]['quantity'] > 1) {
                $cart[$product->id]['quantity']--;
                return $this->setSessionAndReturnResponse($cart);
            } else {
                return $this->removeFromCart($product->id);
            }
        }
    } else {
        if (isset($cart[$product->id])) {
            $cart[$product->id]['quantity']++;
            return $this->setSessionAndReturnResponse($cart);
        }
    }

    return back();
}

public function removeFromCart($id)
{
    $cart = session()->get('cart');

    if (isset($cart[$id])) {
        unset($cart[$id]);
        session()->put('cart', $cart);
    }
    return redirect()->back()->with('success', "Removed from Cart");
}

protected function sessionData(Products $product)
{
    return [
        'name' => $product->nume,
        'quantity' => 1,
        'price' => $product->pret,
    ];
}

protected function setSessionAndReturnResponse($cart)
{
    session()->put('cart', $cart);
    return redirect()->route('cart')->with('success', "Added to Cart");
}

这是我在查看文件中的内容:

<a class="theme_btn add_cart w-100" href="{{route('add.cart', [$produs->id])}}">add to cart
     <span class="theme_btn_eff"></span>
</a>

在我的循环中,当我获取产品时,点击将我重定向到 404 页面而没有出现错误,我试图将 dd($product) 放入控制器但我再次获得 404。

更改此行

<a class="theme_btn add_cart w-100"
href="{{ route('add.cart', [$produs->id]) }}" >add to cart
<span class="theme_btn_eff"></span>
</a>

致此

 <a class="theme_btn add_cart w-100"
href="{{ route('add.cart', ['product' => $produs->id]) }}" >add to cart
<span class="theme_btn_eff"></span>
</a>

在路由文件中,您在 url /add-to-cart/{product} 中传递了命名为 {product} 的路由参数,因此您也需要在视图文件中提及它 {{ route('add.cart', ['product' => $produs->id]) }} 这就是命名约定 laravel 遵循

Route::get('/add-to-cart/{product}', [CartController::class, 'addToCart'])->name('add.cart');