我正在嘗試使用帶有@ExclusionPolicy的JMSSerializer更新symfony2/doctrine實體:無@Groups包含策略。如何從@Groups包含策略更新symfony2/doctrine實體JMSSerializer反序列化實體
* @Serializer\ExclusionPolicy("none")
*/
class Foo
{
/**
* @Serializer\Groups({"flag","edit"})
*/
protected $id;
/**
* @Serializer\Groups({"edit"})
*/
protected $name;
/**
* @Serializer\Groups({"flag"})
*/
protected $flag;
/**
* @Serializer\Exclude()
*/
protected $createdBy;
}
參考:http://jmsyst.com/libs/serializer/master/reference/annotations
結果爲以下記錄:
Foo (id:1, name:'bar', flagged:false ,created_by:123)
使用集團列入避免序列化信息我不需要(協會,斑點等連載.. ),所以當我想更新一個實體時,我只從JSON反序列化實體的更新字段。
$foo->setFlagged(true);
$data = $serializer->serialize($foo, 'json', SerializationContext::create()->setGroups(array("flag")));
result:
{id:1,flagged:true}
,當回傳給應用
反序列化到實體
$foo = $serializer->deserialize($jsonFoo,'Foo','json');
result:
Foo (id:1, name:null, flagged:true, created_by:null)
問題是,當我嘗試將實體合併回主義實體管理器:
$foo = $em->merge($foo);
$em->persist($foo);
$em->flush();
的導致foo試圖用null更新排除的屬性(name,created_by)。
如何告訴JMSSerializer或Doctrine實體管理器合併,我不想用null覆蓋現有屬性?
唯一的選擇,我發現遠遠http://stackoverflow.com/questions/8726611/how-to-update-a-doctrine-entity-from-a-serialized-json這意味着繞過JMSSerializers反序列化並檢查它/更新實體手動(在這個例子中是繞過setter)。 – Heyflynn 2013-05-13 15:38:41