【问题标题】:404 on add to cart laravel404 添加到购物车 laravel
【发布时间】:2021-06-16 10:02:44
【问题描述】:

我在添加到购物车时遇到这种情况,当我想添加到购物车时出现 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。

【问题讨论】:

  • 在查看文件中,你在哪里得到了 href="{{route('add.cart', [$produs->id])}}" 上的这个 $produs 值,这是一样的吗查看您在购物车控制器或其他控制器中以索引方法返回的文件?
  • 如果我在点击添加到购物车后返回到同一页面是什么意思?
  • 我想知道的是,视图文件代码是否与 CartController 上 index 方法返回的视图相同
  • 是的,一样

标签: laravel http-status-code-404 shopping-cart


【解决方案1】:

更改此行

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-17
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-07
    • 2021-04-04
    • 2015-10-10
    相关资源
    最近更新 更多