Symfony 2 表单条件必填字段,字段未映射到实体
Symfony 2 form conditional required field with fields not mapped to entity
我有一个表单,只有在选择 requireField
时才需要字段 conditionalRequiredField
。
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add(
'requireField', 'choice', array
(
'label' => ' ',
'mapped' => false,
'choices' => array
(
'require' => 'Should I require that field?'
),
'multiple' => true,
'expanded' => true
)
)
->add(
'conditionalRequiredField', 'text', array
(
'label' => 'I am required because the field above was selected',
'class' => 'AppBundle\Entity\SomeEntity',
)
)
...和其他一些字段,其中一些映射到实体。
第一个字段未映射到实体。所以在控制器中,当我访问 $form->getData()
时它不可用,它只能通过 Request 对象使用。现在的问题是,我应该如何以及在何处添加验证才能正确执行?要仅使用 isValid()
方法验证整个表单,而无需在其他地方添加任何其他逻辑?我可能可以在某个地方进行验证,但感觉不对。我已经阅读了很多关于约束和验证器的内容,但它们似乎都与实体字段相关联。
感谢您的帮助:-)。
假设链接到此 FormType 的实体是调用 MyEntity
你可能应该有这样的东西:
/**
* @My\CustomValidation
*/
class MyEntity
{
private $requiredField;
/**
* @ORM\Column(type="string")
*/
private $conditionalRequiredField;
}
为了创建您的自定义验证,您可以查看 http://symfony.com/doc/current/cookbook/validation/custom_constraint.html#class-constraint-validator 创建一个 class 约束验证器
您的验证方法如下所示:
public function validate($entity, Constraint $constraint)
{
if(!$entity instanceof MyEntity){
return;
}
if($entity->getRequiredField() && $entity->getConditionalRequiredField() == null) {
$this->context->addViolationAt('conditionalRequiredField', 'you.error.flag', array(), null);
}
}
我有一个表单,只有在选择 requireField
时才需要字段 conditionalRequiredField
。
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add(
'requireField', 'choice', array
(
'label' => ' ',
'mapped' => false,
'choices' => array
(
'require' => 'Should I require that field?'
),
'multiple' => true,
'expanded' => true
)
)
->add(
'conditionalRequiredField', 'text', array
(
'label' => 'I am required because the field above was selected',
'class' => 'AppBundle\Entity\SomeEntity',
)
)
...和其他一些字段,其中一些映射到实体。
第一个字段未映射到实体。所以在控制器中,当我访问 $form->getData()
时它不可用,它只能通过 Request 对象使用。现在的问题是,我应该如何以及在何处添加验证才能正确执行?要仅使用 isValid()
方法验证整个表单,而无需在其他地方添加任何其他逻辑?我可能可以在某个地方进行验证,但感觉不对。我已经阅读了很多关于约束和验证器的内容,但它们似乎都与实体字段相关联。
感谢您的帮助:-)。
假设链接到此 FormType 的实体是调用 MyEntity
你可能应该有这样的东西:
/**
* @My\CustomValidation
*/
class MyEntity
{
private $requiredField;
/**
* @ORM\Column(type="string")
*/
private $conditionalRequiredField;
}
为了创建您的自定义验证,您可以查看 http://symfony.com/doc/current/cookbook/validation/custom_constraint.html#class-constraint-validator 创建一个 class 约束验证器
您的验证方法如下所示:
public function validate($entity, Constraint $constraint)
{
if(!$entity instanceof MyEntity){
return;
}
if($entity->getRequiredField() && $entity->getConditionalRequiredField() == null) {
$this->context->addViolationAt('conditionalRequiredField', 'you.error.flag', array(), null);
}
}