2015-09-17 19 views
5

フォームコンポーネントを使用し、選択フィールドにレンダリングされるフォームにchoice Field Typeがあります。 クライアント側では、select2 pluginを使用して、選択を初期化します。これには、新しい値を追加できる設定tags: trueが設定されています。 私は、新しい値を追加した場合しかし、その後、サーバー上の検証がエラーで失敗します選択肢に新しい値を追加できるようにするフィールドタイプ

この値は有効ではありません。

新しい値が選択リストにないためです。

フィールドタイプを選択するために新しい値を追加する方法はありますか?

答えて

12

問題は、選択リストに存在しない値を消去する選択トランスフォーマーにあります。
The workaround with disabling the transformerは私を助けた:

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder->add('choiceField', 'choice', ['choices' => $someList]); 

    // more fields... 

    $builder->get('choiceField')->resetViewTransformers(); 
} 
+0

展開していない=> true –

1

いいえ、ありません。

あなたがいずれかの方法で手動でこれを実装する必要がありますAJAX

  • 経由で新しい選択肢を作成するために、SELECT2イベントを使用して

    • フォームを検証する前に掲示オプションをキャッチし、オプションリスト
    • に追加
  • 3

    はここで誰かがEntityTypeの代わりChoiceTypeのためにこれを必要とする場合のコード例です。これをあなたのFormTypeに追加してください:

    use AppBundle\Entity\Category; 
    use Symfony\Component\Form\FormEvent; 
    use Symfony\Component\Form\FormEvents; 
    
    $builder->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) { 
        $data = $event->getData(); 
    
        if (!$data) { 
         return; 
        } 
    
        $categoryId = $data['category']; 
    
        // Do nothing if the category with the given ID exists 
        if ($this->em->getRepository(Category::class)->find($categoryId)) { 
         return; 
        } 
    
        // Create the new category 
        $category = new Category(); 
        $category->setName($categoryId); 
        $this->em->persist($category); 
        $this->em->flush(); 
    
        $data['category'] = $category->getId(); 
        $event->setData($data); 
    }); 
    
    関連する問題