我有一个包含两个人的Duo实体。在创建过程中,创建者提交电子邮件地址伙伴并决定他是否是新Duo的队长。如果他决定不是(他选择了助理)那么,自动地,第二个人被指派为队长。我的Duo实体如下:
/**
* @ORM\Table()
* @ORM\Entity()
*/
class Duo{
/**
* @Assert\NotNull()
* @ORM\OneToOne(targetEntity="User")
* @ORM\JoinColumn(name="captain_id", referencedColumnName="id")
*/
private $captain;
/**
* @Assert\NotNull()
* @ORM\OneToOne(targetEntity="User")
* @ORM\JoinColumn(name="assistant_id", referencedColumnName="id")
*/
private $assistant;
我想知道如何组织我的表单,以便只提交一个指定合作伙伴的电子邮件地址。当我呼叫$form->isValid()
时,我希望我的Duo实体有效。我不想使用没有实体的表单,因为我不想手动分配数据并处理表单之外的错误。此外,我想验证两个用户中的一个是否没有参与另一个Duo。如果是,如何以干净的方式将错误消息传递给表单。
我该怎么办?有没有办法使用表单回调或事件或类似的东西?
答案 0 :(得分:0)
数据传输可以做你想做的一切:
http://symfony.com/doc/current/cookbook/form/data_transformers.html
我建议仔细阅读,因为我第一次这样做时非常困惑。这里有一个完美的例子,解释了如何构建issue id
到Issue
,基本上与你的情况相同。
至于错误,我认为您最好的选择是将Callback
与表单constraints
属性结合使用:
你应该阅读整篇文章,因为不仅有“正确”的方式,而且“又快又脏”。
希望这有帮助。