om = $om; $customFields = $this->om ->getRepository(CustomField::class) ->findAll(); // @TODO: in the array_map callback, CustomField::getLabel() does not exist. What do we do here? $customFieldsLablels = array_map( static function ($e) { return $e->getLabel(); }, $customFields ); $customFieldsByLabel = array_combine($customFieldsLablels, $customFields); $this->customField = $customFieldsByLabel; } public function reverseTransform($customFieldsArray) { /* echo "
- - 7 -
"; var_dump(array_keys($customFieldsArray)); echo "
- - 8 -
"; var_dump(array_keys($this->customField)); echo "
- - 9 -
"; */ //var_dump($customFieldsArray); $customFieldsArrayRet = []; foreach ($customFieldsArray as $key => $value) { $traited = false; if (array_key_exists($key, $this->customField)) { $type = $this->customField[$key]->getType(); if (strpos($type, 'ManyToOne') === 0) { // pour le manytoone() faire // un update du form en js ? : http://symfony.com/fr/doc/current/cookbook/form/form_collections.html // //$entityClass = substr($type, 10, -1); //echo $entityClasss; if (strpos($type, 'ManyToOnePersist') === 0) { // PEUT ETRE A FAIRE SI SEULEMENT $value->getId() ne renvoie rien... // // $this->om->persist($value); // pas bon ici // LE PERSIST NE SERT QUE LA PREMIERE FOIS // plutot le mettre dans une var temporaire de adress // et faire le persist qd fait sur l'obj parent // regarder : http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/events.html // ou : http://symfony.com/doc/current/cookbook/doctrine/event_listeners_subscribers.html // dans yml : // lifecycleCallbacks: // prePersist: [ doStuffOnPrePersist, doOtherStuffOnPrePersist ] $this->om->flush(); // sinon l'id pose pbm } $customFieldsArrayRet[$key] = $value->getId(); $traited = true; } } if (!$traited) { $customFieldsArrayRet[$key] = $value; } } //echo json_encode($customFieldsArrayRet); return json_encode($customFieldsArrayRet); } public function transform($customFieldsJSON) { echo $customFieldsJSON; if (null === $customFieldsJSON) { $customFieldsArray = []; } else { $customFieldsArray = json_decode($customFieldsJSON, true, 512, JSON_THROW_ON_ERROR); } $customFieldsArrayRet = []; foreach ($customFieldsArray as $key => $value) { $traited = false; if (array_key_exists($key, $this->customField)) { $type = $this->customField[$key]->getType(); if (strpos($type, 'ManyToOne') === 0) { if (strpos($type, 'ManyToOnePersist') === 0) { $entityClass = substr($type, 17, -1); } else { $entityClass = substr($type, 10, -1); } $customFieldsArrayRet[$key] = $this->om ->getRepository('ChillCustomFieldsBundle:' . $entityClass) ->findOneById($value); $traited = true; } elseif ('ManyToMany(Adress)' === $type) { $customFieldsArrayRet[$key] = $value; } } if (!$traited) { $customFieldsArrayRet[$key] = $value; } } var_dump($customFieldsArrayRet); return $customFieldsArrayRet; } }