如何向Symfony中的表单添加未绑定字段,否则绑定到实体?

tet*_*anz 21 symfony-forms symfony symfony-2.1

也许我错过了显而易见的但我怎么(或者我可以)将一个额外的"未绑定"字段添加到另一个绑定到实体的Symfony表单中?

假设我有一个带字段first_name和实体的实体last_name.我在表单类buildForm方法中做了典型的事情.

$builder
    ->add('first_name')
    ->add('last_name')
;
Run Code Online (Sandbox Code Playgroud)

这在我的控制器中:

$editForm = $this->createForm(new MyType(), $entity);
Run Code Online (Sandbox Code Playgroud)

这很好用,但我想添加另一个文本框,让我们称之为"额外",并在POST操作中接收值.如果我这样做$builder->add('extra')?,那就抱怨了

PropertyAccessor.php第479行中的NoSuchPropertyException:

属性"extra"或方法"getExtra()","extra()","isExtra()","hasExtra()","__ get()"都不存在,并且在课堂上有公共访问权限......

哪个是对的.我只是想用它来收集用户的一些额外信息,并用它做一些事情,而不是将它与实体一起存储.

我知道如何制作一个完全独立的形式,而不是一个"混合"的形式.这可能吗?

fko*_*ler 62

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

$builder->add('extra', 'text', array('property_path' => false));
Run Code Online (Sandbox Code Playgroud)

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

$extra = $form->get('extra')->getData();
Run Code Online (Sandbox Code Playgroud)

UPDATE

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

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

有关HenrikBjørnskov更新信息的信用(以下评论)

  • Symfony 2.1的新方法是使用`mapped`选项并将其设置为`false` (8认同)

Eln*_*mov 27

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

$builder->add('extra', 'text', [
    'mapped' => false,
]);
Run Code Online (Sandbox Code Playgroud)