Слишком мало аргументов для функции App \ Http \ Controllers \ admin \ ProductController :: addToCart (), 2 передано и ожидается ровно 3 - PullRequest
0 голосов
/ 23 сентября 2019

Здравствуйте, я делаю корзину, но когда я нажимаю на ссылку «Добавить в корзину», она говорит: «Слишком мало аргументов для функции 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');
}

Ответы [ 2 ]

1 голос
/ 23 сентября 2019

Это ваш маршрут:

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

Надеюсь, это поможет.

0 голосов
/ 23 сентября 2019

В вашей addToCart передаются только два параметра, поэтому он ищет третий параметр в функции addToCart.У меня это сработало.

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