2
我有实体Message
与多对一关系与实体User
:Symfony2的形式:验证相关的实体属性
class Message
{
...
/**
* @var User $sender
*
* @ORM\ManyToOne(targetEntity="Acme\UserBundle\Entity\User")
* @ORM\JoinColumn(name="sender_id", referencedColumnName="id")
*
**/
private $sender;
...
}
如果$sender
没有email
值我需要为我的形式创造新的领域,所以我创建表单对位指示Message
实体:
$user = $this->getUser();
$message = new Message();
$message->setSender($user);
$formBuilder = $this->createFormBuilder($message, array(
'cascade_validation' => true
));
$formBuilder->add('body', 'textarea');
if (!$user->getEmail()) {
$formBuilder->add('email', 'email', array(
'property_path' => 'sender.email'
));
}
,我已经对实体User
在validation.yml
一些验证规则。我可以通过我的验证规则自动验证此字段是否为另一实体形式的User
实体?我不知道该怎么做。
我找到解决方法现在:创建新的MissingEmailType
:
class MissingEmailType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('email')
;
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Acme\UserBundle\Entity\User',
'validation_groups' => array(
'MissingEmail'
),
));
}
public function getName()
{
return 'missing_email';
}
}
但它看起来复杂。有更好的解决方案吗?