我有一个表格,上面有“我已阅读并同意服务条款”复选框。必须选中该框才能使表单被视为有效,但当然没有理由将该值保存到数据库中,也没有理由向实体添加属性。
在 Symfony2 中实现这种功能的好方法是什么,除非选中该框,否则表单不会被视为有效?
我有一个表格,上面有“我已阅读并同意服务条款”复选框。必须选中该框才能使表单被视为有效,但当然没有理由将该值保存到数据库中,也没有理由向实体添加属性。
在 Symfony2 中实现这种功能的好方法是什么,除非选中该框,否则表单不会被视为有效?
这个问题已经很老了,Symfony 已经更新了很多。对于 Symfony 3.x,您可以执行以下操作:
$builder->add('terms', CheckboxType::class, [
'mapped' => false,
'constraints' => new IsTrue(),
]);
来自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();