在 php/symfony 中取消设置会话数组的有效方法

Effective way to unset session array in php/symfony

php unset 正在工作,但在重新加载时会话数据仍然存在: 我正在构建简单的 addtocart 并在 php/symfony5 中从购物车中删除,但我无法在 symfony 会话中从多维数组中取消设置数组。

^ array:3 [▼
0 => array:1 [▼
  "items" => array:4 [▼
    0 => 9
    1 => "Dry fruit"
    2 => "1234"
    3 => "250g"
  ]
]
1 => array:1 [▼
   "items" => array:4 [▼
   0 => 8
   1 => "Pumpkin"
   2 => "123"
   3 => "x"
 ]

]

这是我的购物车控制器:

        $basket = $session->get('basket',[]);
    dump($basket);
    $size = $session->get('size');
    if($request->isMethod('POST')){
       $id = $request->request->get('0');
       foreach($basket as $key => $value){
           if($value['items'][0] == $id){
            unset($basket[$key]['items']);
            dd($basket);
            //$session->set('basket',[]);
            //return $this->redirectToRoute('cart');
           }
       }

    }

在上面的代码中,当我单击 twig 中的删除按钮并且完成 dd($basket) 时,数组为空,如下所示:

^ array:3 [▼
0 => [] //empty
1 => array:1 [▼
"items" => array:4 [▼
  0 => 8
  1 => "Pumpkin"
  2 => "123"
  3 => "x"
]

]

但是,当我评论 dd($basket) 并重新加载页面时,数组就像以前一样(似乎恢复了 idk)并且如果我取消注释 $session->set('basket',[] );一切都是空的。

这里我想实现的是,如何从会话多维数组中删除数组?

您只需将会话变量设置为更新后的 $basket 值。

// get a copy of the basket from the session
$basket = $session->get('basket',[]);

// do whatever to update $basket here

// overwrite the basket in the session
$session->set('basket', $basket);

// then return a Response