Нормализовать вложенный объект с помощью AbstractNormalizer::ATTRIBUTES

#php #symfony #serialization #normalization

#php #symfony #сериализация #нормализация

Вопрос:

У меня есть объект «Cliente», который имеет вложенный объект (среди других полей) с именем «Responsavel», а затем внутри него другой объект с именем «usuario». Я создаю пользовательский нормализатор, чтобы возвращать данные для меня в виде json, у меня есть это до сих пор:

 
    public function normalize($cliente, $format = null, array $context = [])
    {
        // $data = $this->normalizer->normalize($cliente, $format, $context);
        $data['clienteId'] = $cliente->getId();
        $data['clienteCodigo'] = $cliente->getCodigo();
        $data['clienteRazao'] = $cliente->getRazao();
        $data['clienteRegistro'] = $cliente->getRegistro();
        $data['responsaveis']= [];
        $responsaveis = $cliente->getResponsavel();
        foreach($responsaveis as $responsavel){
            array_push($data['responsaveis'],$this->normalizer->normalize($responsavel, $format, [AbstractNormalizer::ATTRIBUTES => ['id', 'competenciaInicial','ativo', 'usuario']]));
        }
        
        
        return $data;

    }   


 

Я использую AbstractNormalizer, чтобы указать, какое поле я хочу вернуть, но когда я добираюсь до ‘usuario’, я не знаю, как вызывать нужные мне АТРИБУТЫ внутри него, например, usuario [‘id’] . Я нашел это в git symfony

/** * Ограничить (де) нормализацию указанными именами. * * Для вложенных структур этот список должен отражать дерево объектов. */

Как я могу этого добиться? Спасибо!

Ответ №1:

Нашел его, выбрав определенные атрибуты!

При выборе атрибутов из вложенного объекта вы должны делать это следующим образом [AbstractNormalizer::ATTRIBUTES => ['flatAttr', 'nestedOject'=>['flatAttrFromNestedObj']]]