【发布时间】:2017-02-07 01:50:07
【问题描述】:
我有一个简单的表单,有两个字段,电子邮件和姓名。电子邮件在 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 实体中我有一些其他验证,用于其他情况:
Accounts Entity,验证工作正常:
/**
* @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 Entity,验证组被忽略,返回的错误是第二个(地址不为空):
/**
* @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 的名称字段? 我做错了什么?
在我的控制器中:
$form = $this->createForm(
AccountsMedicalCentersType::class,
$currentAccount,
array(
'validation_groups' => array(
'emailValidation',
'Default'
)
)
);
谢谢
【问题讨论】:
-
您必须为
email创建一个子表单类型。然后启用'cascade_validation' => true,。