проверка встраивания формы

У меня есть форма, использующая набор форм для встраивания.

В моей основной форме у меня есть проверка поля «комментарий». Эта простая проверка работает нормально. Моя коллекция форм для встраивания относится к другому объекту. Я хотел бы проверить это поле объекта

|  comment (min length = 5 ok) ------
                                    |   anotherfield (min length = 5 not ok)    
                                    |   anotherfield (min length = 5 not ok) 

Я вызываю два правила проверки формы файлом validation.yml:

My\Bundle\Entity\Main:
    properties:
        comment:
            - Length: 
                min: 5
                minMessage: "minmessage"

My\Bundle\Entity\EmbedEntity:
    properties:
        anotherfield:
            - Length: 
                min: 5
                minMessage: "minmessage"

Но вторая проверка просто игнорируется, и моя форма фиксируется. (ошибки не возвращаются и проходят $form is->valid() )

Мой файл проверки прочитан. (моя первая проверка комментария в порядке)

Я что-то упускаю?


person goto    schedule 23.09.2013    source источник


Ответы (3)


"cascade_validation" => true в вашей родительской форме должен проверить встроенную форму.

Также я думаю, что вы можете добавить Valid во встроенное поле в файле проверки, чтобы заставить его работать.

person qooplmao    schedule 23.09.2013
comment
Кажется, это не так. - person goto; 23.09.2013

Используйте ограничение Valid для проверки объектов, внедренных как свойства родительского объекта.

например при использовании аннотаций

/**
*
* @Assert\Valid
*/
private $items;
person iambray    schedule 15.11.2013

Добавление 'error_bubbling'=>true к свойству также отображает minMessages. Например:

$builder->add('title', null, array('error_bubbling'=>true,"mapped" => true, "description" => "The title of the position"))

В сборщике коллекций-> добавить вызов:

   $builder->add(
            'positionOwners',
            'collection',
            array(
                'type' => new PositionOwnerType($this->positionOwnerFormSubscriber),
                'allow_add' => true,
                'allow_delete' => true,
                'mapped' => true,
                'error_bubbling'=>true,
            'cascade_validation' => true
            )
        )

Кроме того, setDefaultOptions должен выглядеть так:

 /**
 * Set the default options of PositionType form
 * @param OptionsResolverInterface $resolver
 */
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(
        array(
            'data_class' => 'Radsphere\RecruitmentBundle\Entity\PositionType',
            'csrf_protection' => false,
            'cascade_validation' => true,
            'error_bubbling'=>true
        )
    );
}
person shacharsol    schedule 08.01.2014