0

我有一个包含两个人的 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。如果是,如何以干净的方式将错误消息传递给表单。

我应该怎么办?有没有办法使用表单回调或事件或类似的东西来做到这一点?

4

1 回答 1

0

数据传输可以做任何你想做的事情:

http://symfony.com/doc/current/cookbook/form/data_transformers.html

我建议您仔细阅读这篇文章,因为我第一次阅读时感到非常困惑。这里有一个完美的例子来解释如何构建issue idIssue,你的情况基本相同。

至于错误,我认为您最好的选择是Callback与表单constraints属性结合使用:

http://knpuniversity.com/screencast/question-answer-day/custom-validation-property-path#creating-a-proper-custom-validation-constraint

您可能应该阅读整篇文章,因为不仅有“正确”的方式,还有“快速而肮脏”的方式。

希望这可以帮助。

于 2013-09-05T22:34:52.707 回答