Проверьте подчиненную форму, которая не связана с сущностью в Symfony 2 - PullRequest
2 голосов
/ 14 марта 2012

У меня есть форма в 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 из подчиненной формы обозначены как 0 и 1, вот функция JavaScript, которую я использую для динамического генерирования подчиненной формы из атрибута data-prototype:

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 Ответ

1 голос
/ 14 марта 2012

Возможно, что-то в этом роде может помочь:

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 .

...