我的表单上有“我已阅读并同意服务条款”复选框。必须检查该框以使表单被视为有效,但当然没有理由将该值保存到数据库,并且没有理由向实体添加属性。
在Symfony2中实现此类功能的好方法是什么,除非选中此框,否则表单不会被视为有效?
答案 0 :(得分:5)
这个问题很老了,Symfony已经对此进行了更新。对于Symfony 3.x,您可以执行以下操作:
$builder->add('terms', CheckboxType::class, [
'mapped' => false,
'constraints' => new IsTrue(),
]);
答案 1 :(得分:2)
来自symfony docs:
将表单映射到对象时,将映射所有字段。表单上的任何字段在映射对象上不存在将导致抛出异常。 如果您需要表单中的额外字段(例如:“您是否同意这些术语”复选框),而这些字段将不会映射到基础对象,则需要将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();