I’ve got a form in Symfony2 that’s not connected to any entity. It has a child form, of which 1..n instances can be added dynamically on the front-end.
$builder
//car data
->add('cars', 'collection', array(
'label' => ' ',
'type' => new CarLeasingType(),
'allow_add' => true,
'prototype' => true,
))
The parent form has it’s validation to validate other fields that are in the form.
public function getDefaultOptions(array $options)
{
$collectionConstraint = new Collection(array(
'fields' => array(
//some fields an their validation
),
'allowExtraFields' => true,
));
return array('validation_constraint' => $collectionConstraint);
}
The child form (of type CarLeasingType) has it’s own validation. My problem now has two levels:
- I had to set ‘allowExtraFields’ to true in parent form validation constraint, otherwise I got a message like
The fields 0, 1 were not expected - The validation constraint in the child form is not executed at all.
To explain why the cars fields from the subform are identified as 0 and 1 here is the JavaScript function I use to generate the subform dynamically from the data-prototype attribute:
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);
}
How can I validate also each of the subforms added dynamically?
Perhaps something along these lines might help:
Basically, it means taking advantage of the validator service.
Taken from http://symfony.com/doc/current/book/validation.html
For more info on the validator methods/etc., check out the api.