首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将未绑定的字段添加到Symfony中绑定到实体的表单中?

如何将未绑定的字段添加到Symfony中绑定到实体的表单中?
EN

Stack Overflow用户
提问于 2012-10-07 09:25:48
回答 3查看 19.5K关注 0票数 23

也许我错过了显而易见的东西,但是我如何(或者我可以)向绑定到实体的Symfony表单添加一个额外的“未绑定”字段呢?

假设我有一个具有字段first_namelast_name的实体。我在我的表单类buildForm方法中执行了典型的操作。

代码语言:javascript
复制
$builder
    ->add('first_name')
    ->add('last_name')
;

在我的控制器中:

代码语言:javascript
复制
$editForm = $this->createForm(new MyType(), $entity);

这很好用,但我想添加另一个文本框,让我们称其为"extra",并在POST操作中接收值。如果我使用$builder->add('extra')‍,它会抱怨

NoSuchPropertyException在PropertyAccessor.php第479行:

属性"extra“和方法"getExtra()”、"extra()“、"isExtra()”、"hasExtra()“、"__get()”都不存在,并且在类中具有公共访问权限...

这是正确的。我只是想用它从用户那里收集一些额外的信息,并用它做一些事情,而不是将它存储在实体中。

我知道如何制作一个完全独立的表单,但不是一个“混合”的表单。这个是可能的吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-07 13:20:57

在表单中添加一个包含假property_path的文本字段:

代码语言:javascript
复制
$builder->add('extra', 'text', array('property_path' => false));

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

代码语言:javascript
复制
$extra = $form->get('extra')->getData();

更新

Symfony 2.1之后的新方法是使用mapped选项并将其设置为false

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

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

票数 66
EN

Stack Overflow用户

发布于 2012-10-08 04:20:10

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

代码语言:javascript
复制
$builder->add('extra', 'text', [
    'mapped' => false,
]);
票数 30
EN

Stack Overflow用户

发布于 2016-12-20 02:55:05

根据Documentation的说法

allow_extra_fields

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

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

映射的

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

代码语言:javascript
复制
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;
    }
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12765368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档