【问题标题】:Use UniqueEntity on a Gedmo\Blameable field在 Gedmo\Blameable 字段上使用 UniqueEntity
【发布时间】:2017-07-21 07:42:32
【问题描述】:

除了 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 使用)。

【问题讨论】:

  • 一开始以为这是外语UniqueEntity Gedmo Blameable

标签: php validation doctrine symfony


【解决方案1】:

BlameableListener 在 Doctrine 的刷新操作期间被调用,这通常发生在实体被验证之后。这就是为什么 $author 在验证时是 null

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

【讨论】:

    猜你喜欢
    • 2015-11-25
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-17
    • 2012-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多