私はbackbone.jsアプリケーションのsymfony2バックエンドに取り組んでいます。モデルとフォームがあります。
ただし、backbone.jsは、モデルを作成/更新するときにいくつかの追加のプロパティをREST APIに送信し、フォームを検証するのに苦労しています。
symfony2でフォームを取得して追加のデータを受け入れるにはどうすればよいですか、またはデータをフォームにバインドする前に特定のキーをドロップするにはどうすればよいですか?
私はbackbone.jsアプリケーションのsymfony2バックエンドに取り組んでいます。モデルとフォームがあります。
ただし、backbone.jsは、モデルを作成/更新するときにいくつかの追加のプロパティをREST APIに送信し、フォームを検証するのに苦労しています。
symfony2でフォームを取得して追加のデータを受け入れるにはどうすればよいですか、またはデータをフォームにバインドする前に特定のキーをドロップするにはどうすればよいですか?
オプション「allow_extra_fields」を使用する必要があります。
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(
array(
'allow_extra_fields' => true
)
);
}
symfony 2.8以降では、setDefaultOptions(OptionsResolverInterface $ resolver)の代わりにconfigureOptions(OptionsResolver $ resolver)を使用します
property_pathはsf2.1で非推奨になりました。代わりに、「マップされた」を使用してください
$builder
->add("firstName", "text")
->add("lastName", "text")
->add("tac", "checkbox", array(
"mapped" => false
)
);
Symfony2に追加のデータを受け入れさせるには、フォームビルダーに追加のフィールドを追加し、それらのproperty_path
オプションをfalseに設定します。
例:
$builder
->add('my_additional_field', 'checkbox', array(
'mapped' => false,
));
データをバインドする前にキーを削除する必要はありません。とにかく無視されます。
イベントリスナーをリッスンしFormEvents::BIND_CLIENT_DATA
(またはFormEvents::PRE_BIND
2.1 devを使用している場合)、フィールドを追加/削除できます。このクックブックのエントリを参照してください。