0

私はSymfony 2.8アプリケーションのフォームを作成しています。Symfony 2.8フォームエンティティタイプのカスタムプロパティ

私はエンティティオブジェクトを持ち、そのエンティティは1つ以上のサブオブジェクトを持つことができます。 サブオブジェクトは、プロパティ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"を表示していません。 "キー"だけが外界の "有名な財産"です。私がしたいのはこれを行うことです:form [subObjects] [0] = 7TBF65Dtufbg7ung&form [subObjects] [1] = IBIU76ghhこれらの "keys"を使ってSubObjectをDBからロードし、Object 。 私はそれを正しく説明したと思います。 –

+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

イベントリスナーは実際にはオプションですが、これはカスタムリスナー/トランスがなければ可能であるはずです。 –

関連する問題