Подтвердить что ты не робот

Symfony2 с использованием групп проверки в форме

У меня есть Entity со свойством:

/**
 * @var string $name
 *
 * @Assert\NotBlank(groups={"foobar"})
 * @ORM\Column(name="name", type="string", length=225, nullable=false)
 */
private $name;

Форма:

class MyType extends AbstractType
{
    public function buildForm(FormBuilder $builder, array $options)
    {
        $builder->add('name');
    }

    public function getDefaultOptions(array $options)
    {
        return array(
            'data_class' => '...',
            'validation_group' => array('foobar'),
        );
    }

    public function getName()
    {
        ...
    }
}

В контроллере я связываю запрос и вызываю $form- > isValid()

Но как определить validation_group?

4b9b3361

Ответ 1

При создании формы в контроллере добавьте элемент "validation_groups" в массив опций:

$form = $this->createFormBuilder($users, array(
    'validation_groups' => array('foobar'),
))->add(...)
;

Это описано на странице форм книги symfony2: http://symfony.com/doc/current/book/forms.html#validation-groups

Ответ 2

Внутри класса FormType вы можете определить группы проверки, связанные с этим типом, указав параметры по умолчанию:

public function getDefaultOptions(array $options)
{
    return array(
        'data_class' => 'Acme\MyBundle\Entity\MyEntity',
        'validation_groups' => array('group1', 'group2'),
    );
}

Ответ 3

У меня была точно такая же проблема. Я решил это так...

// Entity
$employee = new Employee();

// Form creation
$form = $this->createForm(new EmployeeForm(), $employee, array('validation_groups'=>'registration'));

Я надеюсь, что это поможет!

Ответ 4

Для меня, на symfony 2.1, я решил его, добавив "Default" в validation_groups, например:

public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'Acme\MyBundle\Entity\MyEntity',
        'validation_groups' => array('Default', 'registration')
    ));
}

Ответ 5

Я сделал небольшую запись в блоге, связанную с этой проблемой: http://marcjuch.li/blog/2013/04/21/how-to-use-validation-groups-in-symfony/

В этом сообщении я собираюсь показать, как использовать группы проверки в symfony с примером формы заказа, которая должна предлагать возможность использовать отдельные адреса фактурирования и доставки. Это включает в себя 3 этапа:

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

Ответ 6

Вы также можете динамически определять группы проверки:

// MyCustomType.php
public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(array(
        'validation_groups' => function (FormInterface $form) {
            $data = $form->getData();

            if (Client::TYPE_PERSON == $data->getType()) {
                return array('person');
            }

            return array('company');
        },
    ));
}