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