在网上浏览了几天后,我决定在这里寻求帮助。
我遇到了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
}
然后,如果我只是重新加载页面,或者从:
切换到
我明白了:
Debug::dump($_SESSION);
// Display this :
["frontCart"] => NULL
请帮忙:-( 我完全不明白为什么ZF2有这种行为,如果他不能添加产品,这对于网上商店客户来说是非常有问题的。
THX
修改
根据蒂姆的要求,这里有更多代码。
我在控制器的构造函数
中初始化我的会话容器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是一个具有所有属性的对象。
编辑2
根据Tim的建议,我将“添加到购物车”代码更改为:
$this->sessionCart->frontCartContent = array($cartNumber => $product);
当我想要恢复我的会话内容时,我创建了一个新的Container实例:
// Init new container
$container = new Zend\Session\Container('frontCart');
// Get the content
$container->frontCartContent;
如果我创建了最后一行的Debug :: dump(),我在更改页面后仍然会得到NULL。
答案 0 :(得分:0)
您的代码存在一些问题。尝试:
// 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);
看看是否能给你带来更好的效果。