在Laravel 5.5中更新会话中的数组

时间:2017-11-03 11:34:24

标签: php jquery laravel blade laravel-5.5

我使用Laravel 5.5.19并且最近遇到了令人不快的情况。 我在刀片模板中生成了一些表单:

    @foreach($products as $product)

    <form id="product{{$product['id']}}" class="cartitem">
        <input type="hidden" class="cartitemid" name="cartitemid" value="{{$product['id']}}">
        <input type="text" class="count" name="count" value="{{$product['count']}}">
        <input type="hidden" name="cartid" value="{{$product['cartid']}}">
        {{ csrf_field() }}
    </form>

    @endforeach
<button id="refresh"  type="button" class="btn btn-danger" name="refresh" onClick="refresh(this);">Refresh</button> 

表格序列化并通过Jquery发送给控制器:

function refresh(btn){
    btn.blur();
    if ($('.cartitem').length) {
    $(".cartitem").each(function(){
        var data = $(this).serialize();
        $.ajax({
            url: '/cart/refresh',
            type: 'POST',
            data: data,
            success: function (response) {
              var str = JSON.stringify(response.cart, null, 2);
            console.log(response.id);
            console.log(response.count);
            console.log(str);
            }
        });
        location.reload();
});
}
}

控制器代码:

    public function refresh(Request $request){  
    if (session()->has('cartitems')) {  
    $validatedData = $request->validate([
                   'cartitemid' => 'required|numeric',
                   'count' => 'required|numeric|between:1,255',
                   'cartid' => 'required|string|max:10',
                ]);
            $cartitems = $request->session()->get('cartitems');

                    $count = $validatedData['count'];
                    $id = $validatedData['cartitemid'];
                            foreach ($cartitems as $cartitem => $value){
                                if ($value['id'] == $id){
                                    $cartitems[$cartitem]['count'] = $count;

                                }
                            }
$response = array(
          'cart' => $cartitems,
          'count' => $count,
          'id' => $id,
      );

                  $request->session()->forget('cartitems');
                  $request->session()->put('cartitems', $cartitems);
                  return response()->json($response);
    }
    }

出于某种原因,它无法正常工作。在某些迭代中不保存数组。这也不适用于数据库或cookie驱动程序。

更新 代码正在运作。我在控制台中获得输出,如下所示:

1
1
1
[
  {
    "id": 1,
    "productid": "1",
    "count": "1",
    "price": 10001.2
  }
]

但是在会话中仍然是一个旧阵列。

2 个答案:

答案 0 :(得分:1)

问题似乎在这里

return response()->json($response);
              $request->session()->forget('cartitems');
              $request->session()->put('cartitems', $cartitems);

您在$request->session()之前运行return语句,因此代码永远不会去那里。

只需在最后设置返回行。

答案 1 :(得分:0)

好吧,我有点解决了我的问题。非常简单,只需添加ajax请求即可。

async: false