【问题标题】:Effective way to unset session array in php/symfony在 php/symfony 中取消设置会话数组的有效方法
【发布时间】:2021-06-17 18:30:14
【问题描述】:

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',[]);一切都是空的。

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

【问题讨论】:

    标签: php symfony symfony5


    【解决方案1】:

    您只需将会话变量设置为更新后的$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
    

    【讨论】:

    • 谢谢您,Arleigh 只需稍作修改即可使用。在上面的数组中,0 => [] 会抛出一个错误(我没有注意到),因为如果有某种数组操作,它需要数组元素。为了避免这种情况,我们还必须从会话数组中弹出 0 => []。所以我所做的是我使用了: unset($basket[$key]);无论如何,谢谢你的回答最后奏效了。请更新您的答案 0 => [] 如何导致错误。
    猜你喜欢
    • 2014-02-20
    • 2015-10-08
    • 2014-04-03
    • 1970-01-01
    • 2016-08-03
    • 2017-01-06
    • 2014-04-03
    • 2011-12-04
    • 2016-10-01
    相关资源
    最近更新 更多