![](/img/trans.png)
[英]Symfony 3: GroupSequence validation groups ignored in validation of form
[英]Symfony 3 validation groups inside child entity ignored
我有一个简单的表单,有两个字段,电子邮件和姓名。 电子邮件在 Accounts 实体中,名称在子实体中:MedicalCenters
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Validator\Constraints\Email;
use Symfony\Component\Validator\Constraints\NotBlank;
class AccountsMedicalCentersType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('email')
->add('name', TextType::class, array(
'mapped' => false
));
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(
array(
'validation_groups' => array('emailValidation','Default')
)
);
}
}
我想用验证组验证字段,因为在 MedicalCenters 实体中,我有一些其他验证,适用于其他情况:
帐户实体,验证工作正常:
/**
* @var string
*
* @ORM\Column(name="email", type="string", length=100, nullable=true, unique=true)
* @Assert\NotBlank(groups={"emailValidation"})
* @Assert\Email(groups={"emailValidation"})
*
*/
protected $email;
/**
* @var \MedicalCenters
*
* @ORM\ManyToOne(targetEntity="MedicalCenters")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="medical_centers_id", referencedColumnName="id")
* })
*
* @Assert\Valid
*
*/
private $medicalCenters;
MedicalCenters 实体,验证组被忽略,返回的错误是第二个(地址不为空):
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=300, nullable=true)
* @Assert\NotBlank(message="name not blank", groups={"emailValidation"})
*
*/
private $name;
/**
* @var string
*
* @ORM\Column(name="address", type="text", length=65535, nullable=true)
* @Assert\NotBlank(message="address not blank")
*/
private $address;
我不明白为什么子实体不只验证属于 emailValidation 组的 name 字段? 我究竟做错了什么?
在控制器中,我有:
$form = $this->createForm(
AccountsMedicalCentersType::class,
$currentAccount,
array(
'validation_groups' => array(
'emailValidation',
'Default'
)
)
);
谢谢
添加选项cascade_validation
可以解决问题,但不推荐使用该选项。 使用Valid
约束来验证子对象。 从 Symfony 文档:
此约束用于启用对嵌入为正在验证的对象上的属性的对象的验证。 这允许您验证对象和与其关联的所有子对象。 (来源: https : //symfony.com/doc/current/reference/constraints/Valid.html )
use Symfony\Component\Validator\Constraints\Valid;
class AccountsMedicalCentersType extends AbstractType
{
....
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'validation_groups' => array('emailValidation','Default')
'constraints' => array(
new Valid()
)
));
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.