使用额外字段验证symfony2表单

时间:2012-06-03 08:17:53

标签: symfony

我正在为backbone.js应用程序开发symfony2后端。我有自己的模特和形式。

但是,在创建/更新模型时,backbone.js会向REST API发送一些额外的属性,而我正在努力让表单进行验证。

如何在symfony2中获取表单以接受其他数据,或者如何在将数据绑定到表单之前删除特定键?

4 个答案:

答案 0 :(得分:57)

您应该使用选项“allow_extra_fields”。

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

对于symfony 2.8+使用configureOptions(OptionsResolver $ resolver)而不是setDefaultOptions(OptionsResolverInterface $ resolver)

答案 1 :(得分:16)

现在,在sf 2.1中不推荐使用

property_path,而是使用“mapped”而不是

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

答案 2 :(得分:13)

要让Symfony2接受其他数据,请将其他字段添加到表单构建器,并将其property_path选项设置为false:

示例:

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

在绑定数据之前不需要删除键,无论如何它们都会被忽略。

答案 3 :(得分:2)

您可以收听FormEvents::BIND_CLIENT_DATA(或FormEvents::PRE_BIND,如果您使用的是2.1 dev)事件监听器并添加/删除字段。请参阅this食谱条目。