2017-02-16 17 views
0

私たちは2つのエンティティProduct {properties: name, details } and Tag {properties: name}と多対多の関係を持っています。ユーザーが商品を追加すると、タグを作成することができるようになります。だから私はこれを試しましたsymfony:テキストフィールドと多対多の関係

$builder->add('tags', 'entity', array(
    'class' => 'AppBundle:Tag', 
    'multiple' => true, 
    'expanded' => true, 
    'property' => 'name', 
    'required' => true 
    'allow_add' => true)); 

残念ながら、これは私にタグのドロップダウンリストを与えます。しかし、私が本当に望むのは、ユーザーがタグの名前を入力できる複数のテキスト入力フィールドです。これは、ユーザーがカテゴリフォームを保存するときにデータベースに保存する必要があります。

私が今までに見つけたすべての解決策は、すべてドロップダウンまたはチェックボックスの選択に関連しています。しかし、私のケースでは、データベースにタグのリストがなく、ユーザーが製品を作成するときにタグを作成したいと考えています。だから私はどうすればいいのですか?

答えて

1

エンティティタイプフィールドは、選択、チェックボックス、またはラジオボタン(拡張および複数のオプションに応じて)のみ可能です。オプションはありません。

タグタイプを実装して複数のテキストフィールドレンダリングを解決し、それをフォームにフォームとして埋め込むことができます。コレクション・フィールドによって

アルターでProductType:

... 
$builder->add('tags', CollectionType::class, array(
    'allow_add' => true, 
    'allow_delete' => true, 
    'entry_type' => TagType::class, 
    'entry_options' => array(
     ... 
    ), 
) 
... 

TagType自体を作成します。

class TagType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('tagName', FormType\TextType::class); 
    } 

    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array(
       'data_class' => 'Entity\Tag', 
      ) 
     ); 
    } 
} 

をしかし、マイナス面を意識する - 製品に割り当てられたすべてのタグが存在しない場合、しませんレンダリングされるフィールドはです。基本的に2つのオプションがあります:1)フォームをレンダリングする前にProductエンティティに空のタグをいくつか追加します。2)新しいタグフィールドを追加するためのJavaScriptメソッドを実装します。