也许我错过了显而易见的东西,但是我如何(或者我可以)向绑定到实体的Symfony表单添加一个额外的“未绑定”字段呢?
假设我有一个具有字段first_name
和last_name
的实体。我在我的表单类buildForm
方法中执行了典型的操作。
$builder
->add('first_name')
->add('last_name')
;
在我的控制器中:
$editForm = $this->createForm(new MyType(), $entity);
这很好用,但我想添加另一个文本框,让我们称其为"extra",并在POST操作中接收值。如果我使用$builder->add('extra')
,它会抱怨
NoSuchPropertyException在PropertyAccessor.php第479行:
属性"extra“和方法"getExtra()”、"extra()“、"isExtra()”、"hasExtra()“、"__get()”都不存在,并且在类中具有公共访问权限...
这是正确的。我只是想用它从用户那里收集一些额外的信息,并用它做一些事情,而不是将它存储在实体中。
我知道如何制作一个完全独立的表单,但不是一个“混合”的表单。这个是可能的吗?
发布于 2012-10-07 13:20:57
在表单中添加一个包含假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-08 04:20:10
从Symfony 2.1开始,使用mapped
选项:
$builder->add('extra', 'text', [
'mapped' => false,
]);
发布于 2016-12-20 02:55:05
根据Documentation的说法
allow_extra_fields
通常,如果您提交未在表单中配置的额外字段,您将得到一个“此表单不应包含额外字段”。验证错误。
您可以通过启用表单上的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;
}
}
https://stackoverflow.com/questions/12765368
复制相似问题