脚本宝典收集整理的这篇文章主要介绍了php – Symfony2将实体对象序列化为会话,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
和
我的代码如下:
$offer = $this->getEntITyManager()->getRepository('KkuponMainBundle:Offer')->find($offer_id); $request->getSession()->set('offer',$offer);
我该如何得到它正确?
谢谢.
UPDATE
通过Rowgm的帮助,我可以通过设置属性而不是私有来解决这个问题.唯一的问题是从EntityManager不知道的会话中读取实体后,如果我将对象(从会话)添加到另一个对象(它们之间有OneToMany关系),它将不起作用.
<?PHP $offer = $this->get('session')->get('offer'); $coupon = new Coupon(); $coupon->setOffer($offer); $this->em->PErsist($coupon); $this->em->flush();
这引发了一个错误,因为优惠券有一个对象属性,根据EntityManager不在数据库中(实际上是在DB中,我将数据库放在会话中).
<?PHP $offer = $this->get('session')->get('offer'); echo $this->em->getUnitOfWork()->isInIdentityMap($offer) ? "yes":"no"; //result: no
一个解决方案可以是:
$offer = $this-> em-> merge($offer);
但这似乎不是最好的一个.我希望我的EntityManager能够感知存储在会话中的实体对象,而不是每次都通知它.
任何想法?
即使将所有属性设置为protected,您也可能遇到symfony2的常见问题:您必须重新生成已更改的实体的代理.为此,只需清除缓存.对于开发环境:
app / console cache:clear
即使它说“它包含很多异物,甚至包含外来实体的ArrayCollections”,它也可以工作.
以上是脚本宝典为你收集整理的php – Symfony2将实体对象序列化为会话全部内容,希望文章能够帮你解决php – Symfony2将实体对象序列化为会话所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。