Как управлять простой сессией корзины в Symfony 2?

Я пытаюсь сделать простую корзину в 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

Решение

$request->getSession() возвращает объект (экземпляр сессия который реализует SessionInterface), array_push функция получает массив в качестве первого аргумента (array_push (array &$array , mixed $value1 [, mixed $... ])), конечно, вы не можете использовать функцию array_push здесь.

Я думаю, что решение будет создавать массив, установить этот массив в сеанс, во второй раз получить его обратно из сеанса, изменить его и сохранить обратно в сеанс, например:

$session = $request->getSession();

$myArray = array(
FIRST_ELEMENT
);

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

....

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

array_push($cartElements, 'SECOND_ELEMENT');

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

....
1

Другие решения

поэтому после некоторого тестирования я решил свой вопрос. если вы когда-нибудь захотите использовать 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));
}

2

получить сессию так: $ session = $ request-> getSession ();

и установите параметры в сеансе следующим образом: $ session-> set (‘session_var_name’, $ var);

и получить параметры в сеансе следующим образом: $ request-> get (‘session_var_name’);

Я надеюсь, что это поможет вам!

0