我的实体Message
与实体User
具有ManyToOne关系:
class Message
{
...
/**
* @var User $sender
*
* @ORM\ManyToOne(targetEntity="Acme\UserBundle\Entity\User")
* @ORM\JoinColumn(name="sender_id", referencedColumnName="id")
*
**/
private $sender;
...
}
如果$sender
没有email
值,我需要为表单创建新字段,因此我在Contoller中为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'
));
}
我在实体validation.yml
的{{1}}中有一些验证规则。我可以通过另一个实体形式的User
实体的验证规则自动验证此字段吗?我不知道怎么做。
我现在找到了解决方法:创建新的User
:
MissingEmailType
但看起来很复杂。有没有更好的解决方案?
答案 0 :(得分:0)
您可以将页面重定向到用户个人资料页面,而不是加载消息表单,并说明用户在添加消息之前需要添加电子邮件。如果您快速重定向或创建弹出窗口,只要用户在添加电子邮件后可以返回原始页面,就可能无法关闭用户。然后验证很简单,因为您只需要验证用户实体。