我正在为一个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+ 使用 configureOptions(OptionsResolver $resolver) 而不是 setDefaultOptions(OptionsResolverInterface $resolver)
property_path 现在在 sf 2.1 中已弃用,请改用“mapped”
$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 开发版)事件侦听器并添加/删除字段。请参阅此食谱条目。