除了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使用)。
答案 0 :(得分:0)
在Doctrine的刷新操作期间调用BlameableListener
,这通常在实体经过验证后发生。这就是验证时$author
为null
的原因。
最直接的解决方法是事先设置$author
。