【发布时间】:2018-04-16 03:07:46
【问题描述】:
我正在使用 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
}
]
但在会话中仍然是一个旧数组。
【问题讨论】:
标签: php jquery laravel blade laravel-5.5