0

Ich arbeite an einem Formular in einer Symfony 2.8-Anwendung.Symfony 2.8 Form Entitätstyp benutzerdefinierte Eigenschaft

Ich habe ein Entitätsobjekt und diese Entität kann ein oder mehrere SubObjects haben. Diese Unterobjekte werden durch die Eigenschaft id, aber auch durch die Eigenschaft Schlüssel identifiziert.

Standardmäßig wird der Wert aus der ID -Eigenschaft im HTML (Unterobjekt .__ toString()) verwendet. Ich möchte die Eigenschaft Schlüssel in der verwenden.

Ich kann nicht scheinen zu finden, wie dies zu tun ...

PS: Ich kann die __toString() -Methode des SUBOBJECT verwenden, denn das ist bereits für einige andere Zwecke ...

Ideen würden sehr geschätzt werden.

+0

Ich verstehe nicht, was Sie mit dem Schlüssel tun möchten, können Sie ein Beispiel dafür geben, was Sie erreichen möchten? – Richard

+0

@Richard Ich zeige die "ID" des SubObjects nirgendwo. Nur der "Schlüssel" ist eine "bekannte Eigenschaft" für die Außenwelt. Was ich tun möchte, ist folgendes: form [subObjects] [0] = 7TBF65Dtufbg7ung & form [subObjects] [1] = IBIU76ghh und benutze diese "keys", um das SubObject aus der Datenbank zu laden und sie mit dem Objekt zu verbinden . Ich hoffe, ich habe es richtig erklärt. –

+0

Ich sehe. Es wäre wahrscheinlich am besten, einen Formular-Listener zu schreiben, der die SubObjects-Sammlung basierend auf Ihren logischen Kriterien auffüllt. – Richard

Antwort

1

Ich warf einen kurzen Pseudocode auf, wie ich das in einem Zuhörer tun würde, hoffentlich habe ich verstanden, wonach Sie suchen. Es ist sowieso ein allgemeiner Ansatz.

class ResolveSubObjectSubscriber implements EventSubscriberInterface { 

    /** @var EntityManager */ 
    private $entityManager; 

    public function __construct(FormFactoryInterface $factory, EntityManager $entityManager) { 

     $this->factory = $factory; 
     $this->entityManager = $entityManager; 
    } 

    public static function getSubscribedEvents() { 
     return array(FormEvents::POST_SET_DATA => 'resolveSubObject'); 
    } 

    /** 
    * Resolve sub objects based on key 
    * 
    * @param FormEvent $event 
    */ 
    public function resolveSubObject(FormEvent $event) { 

     $data = $event->getData(); 
     $form = $event->getForm(); 

     // don't care if it's not a sub object 
     if (!$data instanceof SubObject) { 
      return; 
     } 

     /** @var SubObject $subObject */ 
     $subObject = $data; 

     // here you do whatever you need to do to populate the object into the sub object based on key 

     $subObjectByKey = $this->entityManager->getRepository('SomeRepository')->findMySubObject($subObject->getKey()); 
     $subObject->setObject($subObjectByKey); 
    } 
} 
+0

Ein Ereignis-Listener ist in der Tat eine Option, aber ich denke, das sollte ohne benutzerdefinierte Listener/Transformer möglich sein. –