Symfony会话数组在控制器中工作正常,但在树枝中不工作

时间:2015-01-18 15:11:45

标签: php arrays symfony session twig

我有一个名为$products的数组,我将其分配给symfony会话。

ARRAY

Array
(
    [services] => Array
        (
            [0] => Array
                (
                    [id] => 1
                    [icon] => bus.png
                    [name] => Web Development
                    [cost] => 500
                )

            [1] => Array
                (
                    [id] => 2
                    [icon] => ok-shield.png
                    [name] => Saadia
                    [cost] => 200
                )

            [2] => Array
                (
                    [id] => 3
                    [icon] => car.png
                    [name] => Web Development 2
                    [cost] => 200
                )

        )

)

这就是我将其分配给会话的方式

$session = $request->getSession();
$session->set('products', array('services' => $products));

现在,如果我使用twig{{ dump(app.session.get('products')) }}中访问此会话,我可以完全查看和访问它。

enter image description here

这些会话值实际上用在购物车中,每个产品旁边都有一个删除链接,如果你点击删除链接,特定产品应该从会话数组中删除,所以为了达到这个目的,我使用的删除路由是调用以下函数来删除该数组的那一部分,并将更新的数组重新分配给相同的会话变量

public function CartRemoveAction($id, Request $request){
    $session = $request->getSession();
    $products = $session->get('products');
    foreach($products['services'] as $key => $service)
    {
        if($service['id'] == $id)
        {
            unset($products['services'][$key]);
            break;
        }
    }
    $session->set('products', array(
        'services' => $products,
    ));
    return $this->render('featureBundle:Default:cart.html.twig');
}

但这让我留下了2个服务阵列。

enter image description here

即使我删除会话并重新分配,我也会遇到同样的问题。 我使用以下代码从会话中删除products数组。 $session->remove('products');

我做错了哪个导致2个数组或服务?

1 个答案:

答案 0 :(得分:1)

由于

$products = $session->get('products');

要正确设置,请使用:

$session->set('products', $products);