Doctrine 生命周期回调奇怪的行为

Doctrine lifecycleCallbacks strange behaviour

我在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

任何帮助将不胜感激

由于您使用 yaml 定义了回调,因此不需要使用注释再次定义它们。只需删除函数前带有 @ORM\PrePersist 块的注释,一切都会好起来的。

如果您想使用注释来定义您的学说属性,您需要先导入它们,然后才能使用它们。为此,您需要在文件开头添加此行:

use Doctrine\ORM\Mapping as ORM;

我也遇到了同样的问题。

在我的例子中,一切都运行良好,直到我没有在 JsonResponse 中序列化我的对象。

所以问题是我之前没有使用那个实体 class(它给出了错误)来发送 JsonResponse,当我试图准备 JsonResponse 包含那个 class,JsonResponse 无法序列化我的 class,因为它没有实现 Serializable 接口。

如果您使用 findAllfindBy 等方法获取对象,其中 returns 实体对象而不是 php 数组,就会发生这种情况。

所以我只是跳过了那些本地方法并编写了用于获取数据的学说查询。 您还可以实现 Serializable 接口。