ZF2 пустой контейнер для сеансов между страницами

Осмотрев интернет в течение нескольких дней, я решил попросить вашу помощь здесь.

У меня возникла проблема с управлением контейнером сеансов Zend Framework 2. Я не понимаю, почему, но структура опустошала все мои контейнеры каждый раз, когда я меняю страницу.

Мой случай прост, я строю интернет-магазин:

  • Клиент находится на продукте и нажимает кнопку «добавить в корзину»
  • Продукт сохраняется на сеансе
  • Клиент возвращается к списку продуктов, чтобы выбрать другой продукт … но больше нет продукта в его тележке.

Вот фрагмент кода:

// Create container to add product $container = new Zend\Session\Container('frontCart'); // Add product to cart $container->offsetSet('frontCartContent', array(1 => serialize($my_product_object)); 

Если я сделаю отладку сеанса сразу после добавления:

 Debug::dump($_SESSION); // Display this : ["frontCart"] => object(Zend\Stdlib\ArrayObject)#70 (4) { ["storage":protected] => array(1) { ["frontCartContent"] => array(1) { [1] => string(1175) "my serialized product object" } } ["flag":protected] => int(2) ["iteratorClass":protected] => string(13) "ArrayIterator" ["protectedProperties":protected] => NULL } 

Затем, если я просто перезагружаю страницу или переключаюсь с:

http://mydomain.com/products_list/my_product

в

http://mydomain.com/products_list

Я получил :

 Debug::dump($_SESSION); // Display this : ["frontCart"] => NULL 

Пожалуйста, помогите 🙁 Я вообще не понимаю, почему ZF2 имеет такое поведение, и это очень проблематично для клиента интернет-магазина, если он не может добавить и по продуктам.

Спасибо

РЕДАКТИРОВАТЬ

Следующим требованием Тима здесь является больше кода.

Я инициализирую свой контейнер сеанса в конструкторе контроллера

 public function __construct() { if (!$this->sessionCart) { $this->sessionCart = new Container(ConstantSession::FRONT_CART); } } 

Затем, вот точный способ добавления продукта в контейнер

 $this->sessionCart->offsetSet(ConstantSession::FRONT_CART_CONTENT, array($cartNumber => serialize($product)) ); 

$ cartNumber увеличивается после количества продуктов в корзине (когда он будет работать). $ product – объект со всеми его свойствами.

EDIT 2

Следуя советам Тима, я изменил код «добавить в корзину», чтобы:

 $this->sessionCart->frontCartContent = array($cartNumber => $product); 

Когда я хочу вернуть содержимое сеанса, я создаю новый экземпляр контейнера:

 // Init new container $container = new Zend\Session\Container('frontCart'); // Get the content $container->frontCartContent; 

Если я сделаю Debug :: dump () последней строки, я все равно получаю NULL после смены страницы.

Related of "ZF2 пустой контейнер для сеансов между страницами"

В коде есть несколько проблем. Пытаться:

 // Create container to add product $container = new Zend\Session\Container('cart'); // Add product to cart $container->frontCartContent = array($my_product_object); 

то на другой странице вам нужно создать контейнер снова с тем же параметром, который вы использовали выше, а затем проверить содержимое. Не просто $_SESSION :

 $container = new Zend\Session\Container('cart'); var_dump($container->frontCartContent); 

Посмотрите, дает ли это лучшие результаты.