【问题标题】:Too few arguments to function App\Http\Controllers\admin\ProductController::addToCart(), 2 passed and exactly 3 expected函数 App\Http\Controllers\admin\ProductController::addToCart() 的参数太少,通过了 2 个,预期正好有 3 个
【发布时间】: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 请求,productIdquantity 应该在 $request 变量中。目前,您必须向/addToCart/{id}/{quantity} 发出GET 请求,这很奇怪......只需定义一个POST 路由到addToCart 并通过输入传递正确的值。
  • @zlatan 在路线中......

标签: laravel eloquent laravel-5.8


【解决方案1】:

这是你的路线:

Route::get('/addToCart/{product}', 'Admin\ProductController@addToCart')->name('addToCart');

和你的函数定义:

public function addToCart(Product $product, Request $request, $qty)
{
    // ...
}

此函数期望 $product$qty 通过您的路由。

函数 App\Http\Controllers\admin\ProductController::addToCart() 的参数太少,通过了 2 个,预期正好有 3 个

此错误表示您仅将产品传递给路由。

更改函数定义或将参数传递给路由,它将起作用。

更新 这是一个小例子,为您的addToCart 函数定义一个选项参数:

public function addToCart(Product $product, Request $request, $qty=0)
{
    // ...
}

对于您的路线:

Route::get('/addToCart/{product}/{qty?}', 'Admin\ProductController@addToCart')->name('addToCart');

希望对你有帮助。

【讨论】:

  • 我添加了 Route::get('/addToCart/{product}/{qty?}', 'Admin\ProductController@addToCart')->name('addToCart');但还是一样
  • 检查我的更新。我添加了一个带有可选参数的示例。
  • 未定义属性:App\Cart::$totalPrice ibb.co/fCcwvXG
  • 但是我的解决方案能解决您的第一个错误吗?我认为你应该打开另一个问题,因为第二个问题与这个问题范围无关。
【解决方案2】:

在您的 addToCart 中只有两个参数传递,因此它会在函数 addToCart 中搜索第三个参数。在我这行得通。

Route::get('/addToCart/{product}/{qty?}', 'Admin\ProductController@addToCart')->name('addToCart');

【讨论】:

  • public function addToCart(Product $product, Request $request, $qty= null) 在你的函数中试试这个把 $qty= null
猜你喜欢
  • 2018-10-11
  • 2020-05-06
  • 2020-01-29
  • 2020-10-17
  • 1970-01-01
  • 2019-01-23
  • 2019-10-29
  • 2020-04-22
  • 2019-07-06
相关资源
最近更新 更多