禁用表单上的验证器以添加没有javascript的子表单

时间:2012-10-24 22:28:12

标签: php symfony

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

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的情况下运行。

1 个答案:

答案 0 :(得分:0)

您可以根据setDefaultOptions方法中提交的数据动态设置验证组。请参阅here