【问题标题】:How to pass a collection or array from blade file to controller in laravel?如何将刀片文件中的集合或数组传递给laravel中的控制器?
【发布时间】:2020-11-13 04:36:50
【问题描述】:

$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)

【问题讨论】:

    标签: php laravel laravel-blade laravel-controller


    【解决方案1】:

    为什么在checkout方法中使用与index()方法相同的代码逻辑 购物车控制器。

    结帐方法如下所示:

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

    【讨论】:

    • 我在 index.blade 中有购物车页面。我在该页面中有出现次数的产品。并计算总价。现在我必须将$cartItems$totalPrice 发送到CartController。并将其用于进一步计算。但是如果不能直接发送数据。然后我必须再次查询checkout method。我可以正常发送variable 但不能发送数组
    【解决方案2】:

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

    将您的路线从 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');
    }
    

    如果您想继续获取请求,您应该能够按照以下方式进行操作

    因为$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');
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-29
      • 1970-01-01
      • 2016-06-25
      • 2021-01-21
      • 1970-01-01
      • 1970-01-01
      • 2020-04-29
      • 2019-04-13
      相关资源
      最近更新 更多