如何在symfony 2中管理简单的购物车会话?

时间:2014-09-21 05:40:30

标签: php arrays symfony session cart

我试图在symfony2中制作一个简单的购物车,但有关会话的文档非常有限,我发现的唯一例子是关于用户。

根据我在观看视频时的理解,必须采取以下步骤:

1 - 确保有一个会话数组,如果没有声明一个新的会话数组 2通过array_push()向会话数组添加变量; 3场显示会议

到目前为止,这是我的代码:

public function sessiontestAction(Request $request)
{  

$session = $request->getSession();
if(!$session)
{
   $session->set('producto');  
}

 $em = $this->getDoctrine()->getManager();
  $producto = $em->getRepository('savaInventarioBundle:TblProductos')->find(29);

     if(!$producto){
         throw $this->createNotFoundException('no se encontro el producto');
     }

     array_push($session, $producto);

  return $this->render('savaInventarioBundle:Catalogo:sessiontest.html.twig',
           array('productos'=> $session));
}

我的输出只是抛出1个产品而不是每次调用该函数时,它也显示此错误"警告:array_push()期望参数1为数组,对象给出i"

3 个答案:

答案 0 :(得分:2)

所以经过一些测试我解决了我的问题。如果您想使用array_push()来管理symfony 2中的会话,您可以这样做。

symfony2管理会话,你不应该用$ _SESSION来做,这就是我在会话中推送数组的方法。

public function sessiontestAction(Request $ request){

    $productos = array();

   // $session = $request->getSession();
    $session = $this->getRequest()->getSession();

    //check if the session have products
    if ($session->has('producto')) {
        $productos = $session->get('producto');
        array_push($productos, "tomate", "lechuga");
        $session->set('producto', $productos);
    } //if it doesnt create the session and push a array for testing
    else{
        $test = array("orange", "banana");
        $session->set('producto', $test);
    }

//为了从会话传递数组,您必须在新数组上设置它。         $ productos = $ session-> get(' producto');         返回$ this-> render(' savaInventarioBundle:Catalogo:sessiontest.html.twig',array(' productos' => $ productos));     }

答案 1 :(得分:1)

$request->getSession()返回一个对象(实现SessionSessionInterface的实例),array_push函数接收一个数组作为第一个参数(array_push (array &$array , mixed $value1 [, mixed $... ])),当然你不能在这里使用array_push函数。

我认为解决方案是创建一个数组,将此数组设置为session,第二次从会话中检索它并将其存储回会话,例如:

$session = $request->getSession();

$myArray = array(
    FIRST_ELEMENT
);

$session->set('cartElements', $myArray);

....

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

array_push($cartElements, 'SECOND_ELEMENT');

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

....

答案 2 :(得分:0)

得到这样的会话:$ session = $ request-> getSession();

并在会话中设置参数,如下所示:$ session-> set('session_var_name',$ var);

并在会话中获取如下参数:$ request-> get('session_var_name');

我希望这能帮到你!