使用额外字段验证symfony2表单

use*_*227 17 symfony

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

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

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

kru*_*run 59

您应该使用选项"allow_extra_fields".

public function setDefaultOptions(OptionsResolverInterface $resolver)
{
        $resolver->setDefaults(
        array(
            'allow_extra_fields' => true
        )
    );
}
Run Code Online (Sandbox Code Playgroud)

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

  • allow_extra_fields直到2.6才会包含在symfony中.这将是添加额外字段的正确方法.如果您知道将要提交的额外字段名称,那么mapped = false将是建议的方式. (2认同)

Lio*_*nel 16

现在,在sf 2.1中不推荐使用property_path,而是使用"mapped"

$builder
    ->add("firstName", "text")
    ->add("lastName", "text")
    ->add("tac", "checkbox", array(
        "mapped" => false
    )
);
Run Code Online (Sandbox Code Playgroud)


Sam*_*ane 13

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

例:

$builder
    ->add('my_additional_field', 'checkbox', array(
        'mapped' => false,
    ));
Run Code Online (Sandbox Code Playgroud)

在绑定数据之前不需要删除密钥,无论如何它们都将被忽略.

  • +1快速注释> = 2.1:"版本2.1中的新功能:从2.1开始,已为此用例添加了映射选项." http://symfony.com/doc/2.1/reference/forms/types/hidden.html#mapped (3认同)