0

在表单上暂时禁用验证器的最佳方法是什么。考虑以下

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 的情况下工作。

4

1 回答 1

0

您可以根据setDefaultOptions方法中提交的数据动态设置验证组。见这里

于 2012-10-25T06:46:44.927 回答