在表单上暂时禁用验证器的最佳方法是什么。考虑以下
MyController.php
$builder = $this->createFormBuilder()
->add('parentfield1')
->add('parentfield2')
->add('children', 'collection', array('type' => new ChildType(), 'allow_add' => true));
$form = $builder->getForm();
if ($request->request->get('addb')) {
$formReq = $request->request->get('form');
$formReq['children'][] = array(
'child_id' => '1',
'childfield1' => '',
'childfield2' => ''
);
$request->request->set('form', $formReq);
// I would like to disable validators here somehow
$form->bindRequest($request);
} elseif ($request->request->get('sendb')) {
$form->bindRequest($request);
// persist form to database
}
所以在我的表单中,我有两个不同的按钮: sendb - 发布表单,验证它并保存到数据库 addb - 只发布表单并添加新字段以添加子项而不调用验证器
目前我可以用验证组来做到这一点:
$validationGroups = array();
if($request->request->get('addb')) {
// I just use group not defined in entity for any validators
$validationGroups[] = 'novalidation';
}
$builder = createFormBuilder(new ParentEntity(), array('validation_groups' => $validationGroups));
这可行,但这也意味着代码重复,因为 symfony2 只允许将验证器传递给表单构建器构造函数,我必须检查 request->get('addb') 两次。
我知道添加子表单字段也可以使用 javascript(集合原型选项)完成,但我想让它在没有 javascript 的情况下工作。