如何将集合或数组从刀片文件传递到laravel中的控制器?

时间:2020-07-23 12:38:24

标签: php laravel laravel-blade laravel-controller

$cartItems包含数据库中所有产品行,我正在刀片文件中使用它。

我想将此$cartItems从此刀片文件传递回控制器

注意: $cartItems 来自以下控制器中的index()函数。

$cartItems = DB::table('products')->whereIn('id', $cartItemsArray)->get();
return view('cart.index', compact('cartItems')

下面是我的代码。

index.blade.php

<a href="{{route('cart.checkout',$cartItems)}}" class="site-btn">Proceed to checkout</a>

web.php

Route::get('/cart/checkout/{cartItems}', 'CartController@checkout')->name('cart.checkout')->middleware('auth');

CartController.php

public function checkout($cartItems)
{
   dd($cartItems);
   return view('cart.checkout');
}

我得到的错误是,

缺少[Route:cart.checkout] [URI:cart / checkout / {cartItems}]所需的参数。 (查看:E:\ github \ LARAVEL \ Deal-Ocean \ resources \ views \ cart \ index.blade.php)

2 个答案:

答案 0 :(得分:1)

您可以使用表格将数据发送回服务器

将您的路线从get更新为post

Route::post('/cart/checkout', 'CartController@checkout')->name('cart.checkout')->middleware('auth');

使用表格将数据发布到服务器。您还可以将任何其他数据与请求一起传递。

<form method="post" action="/cart/checkout">
@foreach($cartItems as $item)
    <input name="cartItems[]" value="{{ $item->id }}"
@endforeach
<button class="site-btn">Proceed to checkout</button>
</form>

然后在您的控制器中使用Request访问数据

public function checkout(Request $request)
{
    $cartItems = DB::table('products')->whereIn('id', $request->get($cartItems))->get();
   dd($cartItems);
   return view('cart.checkout');
}

如果要继续执行get请求,则应该可以按照以下步骤进行操作

由于$cartItems是产品的集合。因此,您可以发送产品ID,并使用来自请求的ID来查询产品。

<a href="{{ route('cart.checkout', ['cartItems' => $cartItems->pluck('id')->toArray()]) }}" 
    class="site-btn">Proceed to checkout</a>

更新控制器

public function checkout(Request $request)
{
    $cartItems = DB::table('products')->whereIn('id', $request->get($cartItems))->get();
   dd($cartItems);
   return view('cart.checkout');
}

答案 1 :(得分:0)

为什么要在 checkout 方法的 index()方法中使用相同的代码逻辑 CartController。

结帐方法如下:

   $cartItems = DB::table('products')->whereIn('id', $cartItemsArray)->get();
   return view('cart.checkout', compact('cartItems');