Symfony将字符串数组标准化为实体

时间:2019-10-14 13:41:45

标签: php symfony deserialization

我收到的有效载荷如下:

object

包装对象是动物实体,事件是属于事件实体的UUID的数组。这些事件表中可能存在也可能不存在。

我希望能够使用symfony序列化器将其序列化为Animal实体,如下所示:

{
    "date": "2019-03-14 14:48:26 +0000",
    "events": [
    "E09FDE82-4CAA-4641-87AF-6C092D6E71C1",
    "AE12A6BC-DA37-4C37-BF49-DD0CE096AE00"
    ],
    "location": null
}

我想做的是在反序列化期间,我需要查找特定的密钥并对其进行迭代,创建新的Event(或获取现有的Event),并使用它们调用动物的二传手。

我看过symfony规范化器,但是我不认为这些是正确的事情?我做了这个,但不知道从这里去哪里

$serializer = $this->get("serializer");
    if($request->getMethod() == Request::METHOD_POST) {
        $data = $request->getContent();
        $entity = $serializer->deserialize($data, $this->type, 'json');
        ...
        ...

根据文档,这是编辑现有值或添加新值的方式,但是我不知道如何告诉规范化者“嘿,当您看到此键时,您就可以做自己的事情”

任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

在这里您需要一个Denormalizer,尝试实现DenormalizerInterface

class EventNormalizer implements NormalizerInterface, DenormalizerInterface {

   ...

    public function denormalize($data, string $type, string $format = null, array $context = []) 
    {
        // retrieve your events from $data and return the object (Animal) with related events
        // $this->entityManager->find($data['events'][0]) ... 
    }

    public function supportsDenormalization($data, string $type, string $format = null)
    {
        // your code here
    }
}