2011-09-20 40 views
0

这里是情况 -在给出ID之前从实体管理器中检索

我需要在页面之间保留一个对象。在第一页上创建对象,并为其创建一个表单。在第二页上,我坚持这个对象。用户然后可以选择返回并编辑他们的选择,或完成并发布。

我不希望在用户完成编辑对象之前刷新对数据库的更改。问题在于,对象直到刷新到数据库才会获得唯一的ID。

有谁知道我可以如何检索持久但未刷新的对象?这甚至有可能吗?有一个更好的方法吗?

回答

1

序列化对象,直到完成所有属性。您可以将会话中的序列化对象保存在页面之间。当您准备更新或插入时,只需将其反序列化并将其放入数据库。

编辑:例如

// page 1 
$object->setProperty($value); 
$_SESSION['object'] = serialize($object); 

// page 2 
$object = unserialize($_SESSION['object']); 
// use $object 

$_SESSION['object'] = serialize($object); 


// page N 
$object = unserialize($_SESSION['object']); 
$object->insertIntoDB(); 

EDIT 2 - 不要忘了,包括在反序列化对象,否则将无法正常工作的所有页面的类定义。

+0

甜。我早些时候尝试过使用会话,但是我错过了序列化的部分。我会试试看,谢谢你的建议。如果它有效,我会考虑这个答案。 – michael

+0

mmm ..该对象似乎不能通过php函数进行序列化。也许theres symfony功能,我错过了......有错误是项目“couponname”为“O:33:”前端\ UserBundle \实体\优惠券“:20:{s:5:”....这就是从调用\ serialize($ coupon); 500内部服务器错误 - Twig_Error_Runtime – michael

+0

k我想我明白了,使用 使用Symfony \ Component \ Serializer \ Serializer; 使用Symfony \ Component \ Serializer \ Encoder \ JsonEncoder; 使用Symfony \ Component \ Serializer \ Normalizer \ GetSetMethodNormalizer; (); array('json'=> new JsonEncoder())); $ json = $ serializer-> serialize($ coupon,'json'); – michael