0

저는 Symfony 2.8 어플리케이션에서 폼 작업을하고 있습니다.Symfony 2.8 폼 엔티티 타입 사용자 정의 속성

엔티티 개체가 있고 그 엔티티는 하나 이상의 하위 개체를 가질 수 있습니다. 해당 하위 개체는 id 속성뿐만 아니라 속성으로 식별됩니다.

기본적으로 id 속성의 값은 HTML (subObject .__ toString())에서 사용됩니다. 에서 속성을 사용하고 싶습니다. 나는이 작업을 수행하는 방법을 찾을 수 없습니다

...

PS : 그 어떤 다른 목적을 위해 이미 사용하고 있기 때문에 나는, 하위 객체의 __toString() 메소드를 사용할 수 없습니다 ...

아이디어를 크게 높이세요.

<?php 

namespace My\Bundle\ObjectBundle\Form\Type\Object; 

use Symfony\Bridge\Doctrine\Form\Type\EntityType; 
use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\Extension\Core\Type\TextType; 
use Symfony\Component\Form\FormBuilderInterface; 

class ObjectType extends AbstractType 
{ 
    /** 
    * @param FormBuilderInterface $builder 
    * @param array    $options 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('code', TextType::class, [ 
       'required' => true, 
      ]) 
      ->add('subObjects', EntityType::class, [ 
       'class' => 'My\Bundle\ObjectBundle\Entity\SubObject', 
       'multiple' => true, 
      ]) 
    } 
} 
+0

키로 무엇을하고 싶은지 이해할 수 없습니다. 달성하려는 것을 보여줄 수 있습니까? – Richard

+0

@ 리차드 나는 SubObject의 "id"를 어디에도 보여주지 않을 것입니다. "열쇠"만이 외부 세계에 대한 "알려진 재산"입니다. 내가 뭘하고 싶은 : 양식 [subObjects] [0] = 7TBF65Dtufbg7ung & 양식 [subObjects] [1] = IBIU76ghh 및 SubObject를로드하고 객체에 "키" . 나는 그것이 적절하게 설명했으면 좋겠다. .. –

+0

나는 본다. 로직 기준에 따라 subObjects 컬렉션을 채우는 양식 수신기를 작성하는 것이 가장 좋습니다. – Richard

답변

1

나는 청취자에게 이것을 어떻게하면 좋을지에 대해 간단한 의사 코드를 작성했다. 나는 네가 무엇을했는지 알기를 바란다. 그것은 어쨌든 일반적인 접근 방법입니다.

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

이벤트 리스너는 실제로 옵션이지만, 사용자 정의 리스너/트랜스포머없이 가능해야한다고 생각합니다. –

관련 문제