public function unserialize($object, $jsonData)
 {
     $jsonData = is_array($jsonData) ? json_encode($jsonData) : $jsonData;
     $serializer = SerializerBuilder::create()->build();
     $jmsObject = $serializer->deserialize($jsonData, $object, 'json');
     $jmsMethods = get_class_methods($jmsObject);
     $id = $jmsObject->getId();
     if ($id) {
         $ormObject = $this->findFromOrm($object, $id);
         $ormMethods = get_class_methods($ormObject);
         foreach ($jmsMethods as $i => $function) {
             //Intera todos os methodos do objeto
             $setFunc = 'set' . substr($function, 3);
             //Setter Function
             if (substr($function, 0, 3) === 'get' && $jmsObject->{$function}() !== null && in_array($setFunc, $ormMethods)) {
                 // exista a função setter no orm
                 if (!is_object($jmsObject->{$function}())) {
                     //atributo simples
                     $ormObject->{$setFunc}($jmsObject->{$function}());
                 }
             }
         }
     } else {
         /*
          * Caso objeto seja novo e não tenha id, confere se existe alguma entidade relacionada enviada junto
          * caso exista carrega a entidade via doctrine para nao gera problemas no persist
          */
         foreach ($jmsMethods as $i => $function) {
             //Intera todos os methodos do objeto
             //Caso seja uma função getter && tenha um valor setado && exista a função setter no orm
             if (substr($function, 0, 3) === 'get') {
                 $setFunc = 'set' . substr($function, 3);
                 //Setter Function
                 $prop = $jmsObject->{$function}();
                 //Reload de objeto simples
                 if (is_object($prop) && method_exists($prop, 'getId') && $prop->getId()) {
                     $jmsObject->{$setFunc}($this->findFromOrm(get_class($prop), $prop->getId()));
                 } elseif (is_object($prop) && get_class($prop) == 'Doctrine\\Common\\Collections\\ArrayCollection') {
                     $elements = $prop->getValues();
                     foreach ($elements as $i => $element) {
                         $prop->offsetSet($i, $this->findFromOrm(get_class($element), $element->getId()));
                     }
                     $jmsObject->{$setFunc}($prop);
                 }
             }
         }
     }
     return $id ? $ormObject : $jmsObject;
 }
示例#2
0
 public function etablissementQcmAction($id)
 {
     $em = $this->getDoctrine()->getEntityManager();
     $etablissement = $em->getRepository('GenericBundle:Etablissement')->find($id);
     $serializer = SerializerBuilder::create()->build();
     $jsonContent = $serializer->serialize($etablissement->getQcmdef(), 'json');
     $reponse = new JsonResponse();
     return $reponse->setData(array('adresses' => $jsonContent));
 }
 /**
  * Just setup a rest client mock and the serializer
  */
 public function setUp()
 {
     $this->restClient = $this->getMockBuilder(RestClient::class)->disableOriginalConstructor()->getMock();
     $this->serializer = SerializerBuilder::create()->build();
 }