2017-01-19 20 views
0

このようなシナリオが発生するかどうかはわかりません。私はsymfonyでmongodbを使用しています。私はそれをmongodbに接続するための文書をやっています。私は、コレクション名に製品を作成し、製品の下のフィールドには、AJAXを使用してフォームを送信するとき、私は、検証のためのフォームタイプを追加FormTypeに含まれていないフィールドを追加するにはどうすればよいですか?

- id 
- name 
- price 

です。

class ProductType extends AbstractType { 
    public function buildForm(FormBuilderInterface $builder, array $options) { 
     $builder 
      ->add('name', TextType::class) 
      ->add('price', TextType::class); 
    } 

    public function configureOptions(OptionsResolver $resolver) { 
     $resolver->setDefaults(
      array(
       'data_class' => 'Acme\StoreBundle\Document\Product', 
       'csrf_protection' => false 
      ) 
     ); 
    } 
} 

ただし、ProductTypeに含まれていないフィールドを追加したいとします。いつ私はそれをする。私はエラーが発生します。

"This form should not contain extra fields." 

これは私が話している他のフィールドが選択されているフォーム

public updateCompleted(id:string,name:string,price:string,selected:string){ 

      let data = {name:name,price:price,selected:selected}; 
      let _data = {product: data}; 

      return $.ajax({ 
       url:this.setCompletedUrl(id), 
       type: "PATCH", 
       data:_data, 
       async:false 
      }); 
     } 

を提出するための私のAjaxです。クライアントが選択した文字列をバックエンドでチェックしたい。しかし、私の文書Productにこのフィールドを追加したいと思うのはsymfonyのようです。それを行うための他の方法はありますか?

答えて

1

フォームフィールドの「マップされた」オプションを使用してください:選択した。この場合

class ProductType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('name', TextType::class) 
      ->add('price', TextType::class); 
      ->add('selected', TextType::class, [ 
       'mapped' => false 
      ]) 
    } 

    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(
      array(
       'data_class' => 'Acme\StoreBundle\Document\Product', 
       'csrf_protection' => false 
      ) 
     ); 
    } 
} 

は、Productオブジェクトに設定されていますが、Requestオブジェクトに見つけることができる値を選択することではないでしょう。

2

FormTypeに新しいフィールドを追加します。オプションでは、'mapped' => falseと設定します。フィールドがあなたのドキュメント製品にある必要はありません。

フォームオブジェクトを通じて新しいフィールドのポスト値を取得できます。

希望に役立ちます。

+0

私はちょうどこの同じ解決策を提案しようとしていました! –

関連する問題