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
接口。
如果您使用 findAll
或 findBy
等方法获取对象,其中 returns 实体对象而不是 php 数组,就会发生这种情况。
所以我只是跳过了那些本地方法并编写了用于获取数据的学说查询。
您还可以实现 Serializable
接口。
我在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
接口。
如果您使用 findAll
或 findBy
等方法获取对象,其中 returns 实体对象而不是 php 数组,就会发生这种情况。
所以我只是跳过了那些本地方法并编写了用于获取数据的学说查询。
您还可以实现 Serializable
接口。