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?
Ответы
Ответ 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');
},
));
}