1

我有一个表格,上面有“我已阅读并同意服务条款”复选框。必须选中该框才能使表单被视为有效,但当然没有理由将该值保存到数据库中,也没有理由向实体添加属性。

在 Symfony2 中实现这种功能的好方法是什么,除非选中该框,否则表单不会被视为有效?

4

2 回答 2

5

这个问题已经很老了,Symfony 已经更新了很多。对于 Symfony 3.x,您可以执行以下操作:

$builder->add('terms', CheckboxType::class, [
    'mapped' => false,
    'constraints' => new IsTrue(),
]);
于 2016-12-12T15:30:17.963 回答
2

来自symfony 文档

将表单映射到对象时,会映射所有字段。映射对象上不存在的表单上的任何字段都将导致抛出异常。如果您需要表单中的额外字段(例如:“您是否同意这些条款”复选框)不会映射到基础对象,则需要将 property_path 选项设置为 false:

use Symfony\Component\Form\FormBuilderInterface;

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder->add('task');
    $builder->add('dueDate', null, array('property_path' => false));
}

可以在控制器中访问字段数据:

$form->get('dueDate')->getData();
于 2012-09-17T17:28:05.690 回答