我在yaml中定义了lifecycleCallbacks,如下所示:
lifecycleCallbacks:
prePersist: [setCreatedAtValue]
preUpdate: [setUpdatedAtValue]
上面已经生成了各自具有如下功能的实体:
/**
* @ORM\PrePersist
*/
public function setCreatedAtValue()
{
if($this->created_at == null)
{
$this->created_at = new \DateTime();
}
}
哪个看起来都很好,对吧?但是,当我尝试打开奏鸣曲管理页面时,我收到以下错误
[Semantical Error] The annotation "@ORM\PrePersist" in method AppBundle\Entity\Article::setCreatedAtValue() was never imported. Did you maybe forget to add a "use" statement for this annotation?
我之前从未遇到过这种情况,对于该怎么做有点困惑。我使用的是symfony 2.7.6,Doctrine ORM 2.5.1版,Sonata Admin 2.3.7
非常感谢任何帮助
答案 0 :(得分:2)
由于您使用yaml定义了回调,因此无需使用注释再次定义它们。只需在函数前删除@ORM\PrePersist
块的注释,一切都会好的。
如果要使用注释来定义教条属性,则需要先导入它们,然后才能使用它们。为此,您需要在文件的开头添加此行:
use Doctrine\ORM\Mapping as ORM;
答案 1 :(得分:1)
我也遇到了同样的问题。
就我而言,一切正常,直到我没有在JsonResponse
中序列化对象。
所以问题是,以前,当我尝试准备包含该类JsonResponse
的{{1}}时,我并没有使用该实体类(它给了错误)来发送JsonResponse
无法对我的课程进行序列化,因为该课程尚未实现JsonResponse
接口。
如果您使用Serializable
或findAll
之类的方法获取对象,这些方法返回Entity对象而不是php数组,则会发生这种情况。
因此,我只是跳过了这些本机方法,并编写了用于获取数据的学说查询。
您还可以实现findBy
接口。