2014-09-21 122 views
0

即时尝试在symfony2中制作一个简单的购物车,但关于会话的文档非常有限,我发现的唯一例子是关于用户的。如何在symfony 2中管理简单的购物车会话?

从我了解的看视频是必须做出这样的步骤:

1,确保有一个session数组,如果不申报新的会话阵列 变量session数组通过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”的

回答

1

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

我认为解决方案将创建一个数组,设置该数组会议,第二次retreive从会议回来修改,并将其存放回会话,例如:

$session = $request->getSession(); 

$myArray = array(
    FIRST_ELEMENT 
); 

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

.... 

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

array_push($cartElements, 'SECOND_ELEMENT'); 

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

.... 
0

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

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

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

我希望这对你有所帮助!

2

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

symfony2管理会话,你不应该这样做$ _SESSION,这是我如何推动数组在会话中。

公共职能sessiontestAction(请求$要求){

$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'); return $ this-> render('savaInventarioBundle:Catalogo:sessiontest.html.twig',array('productos'=> $ productos)); }

+0

有什么区别? – xurshid29 2014-09-30 05:03:18

+0

我问了3件事, 1-确保有一个会话数组,如果没有声明一个新的会话数组(你的答案缺少这个) 2通过array_push()添加变量到会话数组; 3-session session symfony以不同的方式管理会话,我不知道session-> has(),并想学习如何管理会话,我已经知道背后的逻辑我想要的,但不知道功能,必须弄清楚这些事情。 – 2one2 2014-10-01 00:39:35