php – Symfony2将实体对象序列化为会话

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了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能够感知存储在会话中的实体对象,而不是每次都通知它.
任何想法?

@H_126_29@ 您可以通过将其所有属性和关系从PRivate设置为protected来序列化任何实体.

即使将所有属性设置为protected,您也可能遇到symfony2的常见问题:您必须重新生成已更改的实体的代理.为此,只需清除缓存.对于开发环境:

app / console cache:clear

即使它说“它包含很多异物,甚至包含外来实体的ArrayCollections”,它也可以工作.

脚本宝典总结

以上是脚本宝典为你收集整理的php – Symfony2将实体对象序列化为会话全部内容,希望文章能够帮你解决php – Symfony2将实体对象序列化为会话所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。