我在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类型)有自己的验证。我的问题现在有两个层次:
The fields 0, 1 were not expected
解释为什么子表单中的cars
字段被标识为0
和1
这里是我用来从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);
}
如何验证每个动态添加的子表单?
答案 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。