symfony2 с использованием групп проверки в форме - PullRequest
11 голосов
/ 06 сентября 2011

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

/**
 * @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 ()

Но как определить группу проверки?

Ответы [ 6 ]

13 голосов
/ 30 января 2012

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

// Entity
$employee = new Employee();

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

Надеюсь, это поможет!

13 голосов
/ 11 января 2012

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

public function getDefaultOptions(array $options)
{
    return array(
        'data_class' => 'Acme\MyBundle\Entity\MyEntity',
        'validation_groups' => array('group1', 'group2'),
    );
}
10 голосов
/ 06 сентября 2011

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

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

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

2 голосов
/ 08 ноября 2012

Для меня в 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')
    ));
}
1 голос
/ 21 апреля 2013

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

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

  • Групповые контрольные проверки для полей формы, связанной с отправкой, вместе
  • Определение применяемых контрольных проверок в зависимости от значения флажка в отправленной форме
  • Копировать данные из полей, не относящихся к отправке, в поля отправления, если флажок не установлен
0 голосов
/ 12 июля 2016

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

// 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');
        },
    ));
}
...