验证Symfony 2中未连接到实体的子表单

时间:2012-03-14 10:52:59

标签: forms validation symfony

我在Symfony2中有一个没有连接到任何实体的表单。它有一个子表单,其中1..n个实例可以在前端动态添加。

$builder
    //car data
        ->add('cars', 'collection', array(
            'label' => ' ',
            'type' => new CarLeasingType(),
            'allow_add' => true,
            'prototype' => true,
        ))

父表单有验证来验证表单中的其他字段。

public function getDefaultOptions(array $options)
{
    $collectionConstraint = new Collection(array(
        'fields' => array(
            //some fields an their validation
        ),
        'allowExtraFields' => true,
    ));

    return array('validation_constraint' => $collectionConstraint);
}

子表单(CarLeasingType类型)有自己的验证。我的问题现在有两个层次:

  • 我必须在父表单验证约束中将'allowExtraFields'设置为true,否则我会收到The fields 0, 1 were not expected
  • 之类的消息
  • 子表单中的验证约束根本不会执行。

解释为什么子表单中的cars字段被标识为01这里是我用来从data-prototype属性动态生成子表单的JavaScript函数:

function add_dynamic_field(holderId) {
    var collectionHolder = $('#' + holderId);
    if (0 === collectionHolder.length) return false;
    var prototype = collectionHolder.attr('data-prototype');
    form = prototype.replace(/<label class=" required">\$\$name\$\$<\/label>/, '');
    form = form.replace(/\$\$name\$\$/g, collectionHolder.children().length);
    collectionHolder.append(form);
}

如何验证每个动态添加的子表单?

1 个答案:

答案 0 :(得分:1)

也许这些内容可能有所帮助:

public function somexAction()
{

    //get objects through the $form object

    //get validator service
    $validator = $this->get('validator');

    //validate objects manually
    foreach object as obj
       $errors = $validator->validate($obj);
    if (count($errors) > 0) {
        //...
    } else {
        //....
    }
}

基本上,这意味着利用验证器服务。

取自http://symfony.com/doc/current/book/validation.html

有关验证方法/等的更多信息,请查看api