我试图通过 AJAX 将篮子数据存储在 Laravel 5 的会话中,但每次我尝试将项目推送到存储为"篮子"值的数组时,现有的"篮子"数组都会被覆盖。
以下是我的控制器方法:
public function add(Request $request)
{
$success = false;
if ($request->ajax()) {
$ticket = Ticket::find((int) $request->get('ticket_id'));
if ($ticket) {
if (!$request->session()->has('basket')) {
$request->session()->put('basket', []);
}
$item = [
'attraction.name' => $ticket->attraction->name,
'ticket.quantity' => $request->get('quantity'),
'ticket.price' => $ticket->price,
];
$request->session()->push('basket', [$ticket->id => $item]);
$success = true;
}
}
return response()->json(['success' => $success]);
}
第一个实例在篮子会话数组中设置了一个项目,但我希望它添加到这个数组中,而不是在我将更多项目数据发布到此方法时覆盖。
我希望实现的最终结果是这样的:
Array
(
[basket] => Array
(
[123] => Array
(
[attraction.name] => Attraction 1
[ticket.quantity] => 2
[ticket.price] => 14.5
)
[456] => Array
(
[attraction.name] => Attraction 2
[ticket.quantity] => 3
[ticket.price] => 12
)
)
)
我尝试使用会话外观等效方法,但无济于事:(
任何帮助将不胜感激。谢谢:)
我试过array_merge()
但我的会话再次被覆盖。所以,在再次戴上调试帽后,我找到了它发生的原因。
会话数据在每个请求后都不会持久保存。由于我的会话没有被记住,!$request->session()->has('basket')
总是在评估true
因此我的篮子会话每次都被设置回空数组。
我需要使用以下行将我的请求作为 JSON 返回,以便我的会话数据持久化。也许这是因为我在 AJAX 调用中dataType: 'json'
作为属性?
return response()->json($request);
我也采纳了你的建议,抓住了篮子会话数组,将新数据推送到其中并放回会话中。
排序!谢谢你们的帮助:)
我遇到了类似的问题,发现在向会话添加值后,您需要调用 session()->save();