我试图在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"
答案 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()
返回一个对象(实现Session的SessionInterface的实例),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');
我希望这能帮到你!