【发布时间】:2020-01-23 20:36:24
【问题描述】:
您好,我正在制作购物车,但是当我单击添加到购物车链接时,它会显示:“函数 App\Http\Controllers\admin\ProductController::addToCart() 的参数太少,通过了 2 个,预期正好有 3 个” ,我该如何解决这个错误错误https://ibb.co/C2FZYD9
提前致谢,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
型号:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Cart
{
private $contents;
private $totalQty;
private $contentsPrice;
public function __construct($oldCart){
if ($oldCart) {
$this->contents = $oldCart->contents;
$this->totalQty = $oldCart->totalQty;
$this->totalPrice = $oldCart->totalPrice;
}
}
public function addProduct($product, $qty){
$products = ['qty' => 0, 'price' => $product->price, 'product' => $product];
if ($this->contents) {
if (array_key_exists($product->slug, $this->contents)) {
$product = $this->contents[$product->slug];
}
}
$products['qty'] +=$qty;
$products['price'] +=$product->price * $product['qty'];
$this->contents[$product->slug] = $product;
$this->totalQty+=$qty;
$this->totalPrice += $product->price;
}
public function getContents()
{
return $this->contents;
}
public function getTotalQty()
{
return $this->totalQty;
}
public function getTotalPrice()
{
return $this->totalPrice;
}
}
路线:
Route::get('cart', 'Admin\ProductController@cart')->name('product.cart');
Route::get('/addToCart/{product}', 'Admin\ProductController@addToCart')->name('addToCart');
控制器:
public function cart()
{
if (!Session::has('cart')) {
return view('products.cart');
}
$cart = Session::has('cart');
return view('product.cart', compact('cart'));
}
public function addToCart(Product $product, Request $request, $qty)
{
if(empty(Auth::user()->email)){
$data['email'] = '';
}else{
$data['email'] = Auth::user()->email;
}
$oldCart = Session::has('cart') ? Session::get('cart') : null;
$qty = $request->qty ? $request->qty : 1;
$cart = new Cart($oldCart);
$cart->addProduct($product, $qty);
Session::put('cart', $cart);
return redirect()->back()->with('flash_message_success', 'Product $product->title has been successfully added to Cart');
}
【问题讨论】:
-
你在哪里调用
addToCart()函数? -
我认为是因为你的路由定义
Route::get('/addToCart/{product}', 'Admin\ProductController@addToCart');,你只通过了{product} -
addToCart()函数需要 3 个参数。一个是请求,另外两个是路由参数。可能你错过了其中之一。 -
这是一个糟糕的设计......这应该是一个
POST请求,productId和quantity应该在$request变量中。目前,您必须向/addToCart/{id}/{quantity}发出GET请求,这很奇怪......只需定义一个POST路由到addToCart并通过输入传递正确的值。 -
@zlatan 在路线中......
标签: laravel eloquent laravel-5.8