2012-06-03 13 views
13

私はbackbone.jsアプリケーション用のsymfony2バックエンドで作業しています。私は自分のモデルとフォームを持っています。余分なフィールドを使ってsymfony2フォームを検証する

しかし、backbone.jsはモデルを作成/更新しているときにREST APIにいくつかの追加プロパティを送信し、検証するフォームを取得するのに苦労しています。

追加のデータを受け入れるためにsymfony2でフォームを取得するにはどうすればよいですか、またはデータをフォームにバインドする前に特定のキーを削除するにはどうすればよいですか?

答えて

12

データをバインドする前に、とにかく無視されます。

+3

+1> 2.1の新機能:「バージョン2.1の新機能:2.1以降、マップされたオプションがこのユースケースに追加されました」 http://symfony.com/doc/2.1/reference/forms/types/hidden.html#mapped –

+0

有効なバージョンを追加して回答を更新することを検討する必要があります。 – xPheRe

+1

私はもうPHPをやりません。できれば私の答えを更新してください。 –

2

FormEvents::BIND_CLIENT_DATA(または2.1 devを使用している場合はFormEvents::PRE_BIND)イベントリスナーを聞き取り、フィールドを追加/削除できます。調布簿の項目thisを参照してください。

例:

$builder 
    ->add('my_additional_field', 'checkbox', array(
     'mapped' => false, 
    )); 

あなたが鍵をドロップする必要はありませんSymfony2のは、追加のデータを受け入れるフォームビルダにフィールドを追加し、falseに彼らのproperty_pathオプションを設定し取得するために

16

property_pathは現在、代わりに

$builder 
    ->add("firstName", "text") 
    ->add("lastName", "text") 
    ->add("tac", "checkbox", array(
     "mapped" => false 
    ) 
); 
46

あなたはオプション "allow_extra_fields" を使用する必要があります "マッピング"、SF 2.1での使用を推奨されていません。

public function setDefaultOptions(OptionsResolverInterface $resolver) 
{ 
     $resolver->setDefaults(
     array(
      'allow_extra_fields' => true 
     ) 
    ); 
} 
+2

allow_extra_fieldsは2.6までsymfonyに含まれません。これは、余分なフィールドを追加する正しい方法です。送信される余分なフィールド名がわかっている場合は、mapped = falseが推奨されます。 – Heyflynn

+1

2.6が安定版としてマークされたので、正解とマークする必要があります。 @user1432227 – Chausser

+0

@krunまた、setDefaultOptions関数の代わりに 'configureOptions(OptionsResolver $ resolver)'のようなsymfony 2.8/3. *の例を追加することもできます。 –

関連する問題