Laravel 5.2 - 添加到现有会话数组将覆盖现有会话


Laravel 5.2 - adding to existing session array overwrites existing session

我试图通过 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();