在Gedmo \ Blameable字段上使用UniqueEntity

时间:2017-03-01 19:58:41

标签: php validation doctrine symfony

除了Symfony 3.2和Doctrine 2.5.6之外,我正在使用Gedmo扩展,我遇到了一个问题。我不能让Gedmo \ Blameable和UniqueEntity约束一起工作。实际上,在验证时,责备字段仍为空。有什么方法可以使它工作或可能的解决方法吗?

这是我的实体

/**
 * @UniqueEntity(
 *     fields={"author", "question"},
 *     errorPath="question",
 *     message="This author already has an answer for that Question"
 * )
 * @ORM\Entity
 */
 class TextAnswer
 {

  /**
   * @ORM\ManyToOne(targetEntity="User")
   * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
   * @Gedmo\Blameable(on="create")
   */
  private $author;

  /**
   * @Assert\NotNull()
   * @ORM\ManyToOne(targetEntity="Question", inversedBy="textAnswers")
   * @ORM\JoinColumn(name="question_id", referencedColumnName="id")
   */
  private $question;
}

由于

编辑:解决方案

我没有手动设置用户(删除了Gedmo \ Blameable的兴趣),而是创建了自己的实体验证器。 我将它的学说和令牌存储作为参数,因此它可以在db上进行查询,以便与当前连接的用户验证我的标准(稍后将由Gedmo \ Blameable使用)。

1 个答案:

答案 0 :(得分:0)

在Doctrine的刷新操作期间调用BlameableListener,这通常在实体经过验证后发生。这就是验证时$authornull的原因。

最直接的解决方法是事先设置$author