24
4

3 回答 3

67

在您的表单中添加一个带有 false property_path 的文本字段:

$builder->add('extra', 'text', array('property_path' => false));

然后,您可以访问控制器中的数据:

$extra = $form->get('extra')->getData();

更新

自 Symfony 2.1 以来的新方法是使用该mapped选项并将其设置为false.

->add('extra', null, array('mapped' => false))

Henrik Bjørnskov 的更新信息致谢(下方评论)

于 2012-10-07T05:20:57.047 回答
30

从 Symfony 2.1 开始,使用以下mapped选项:

$builder->add('extra', 'text', [
    'mapped' => false,
]);
于 2012-10-07T20:20:09.787 回答
4

根据文档

允许额外字段

通常,如果您提交未在表单中配置的额外字段,您将收到“此表单不应包含额外字段”。验证错误。

您可以通过启用allow_extra_fields表单上的选项来消除此验证错误。

映射

如果您希望在读取或写入对象时忽略该字段,您可以将该mapped选项设置为 false。

class YourOwnFormType extends AbstractType
{
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(
            array(
                'allow_extra_fields' => true
            )
        );
    }

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $form = $builder
            ->add('extra', TextType::class, array(
                'label' => 'Extra field'
                'mapped' => false
            ))
        ;
        return $form;
    }
}
于 2016-12-19T18:55:04.937 回答