【问题标题】:Doctrine lifecycleCallbacks strange behaviour学说生命周期回调奇怪的行为
【发布时间】:2016-02-04 11:10:52
【问题描述】:

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

任何帮助将不胜感激

【问题讨论】:

    标签: symfony doctrine-orm doctrine


    【解决方案1】:

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

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

    use Doctrine\ORM\Mapping as ORM;
    

    【讨论】:

    • 感谢它的工作,我通常只依赖于 Doctrine 生成的实体,直到现在还没有遇到过问题。看来我需要更加关注更改日志。
    【解决方案2】:

    我也遇到了同样的问题。

    在我的情况下,一切正常,直到我没有序列化 JsonResponse 中的对象。

    所以问题是以前我没有使用那个实体类(它给出错误)来发送JsonResponse,一旦我尝试准备包含该类的JsonResponseJsonResponse 无法将我的类序列化为它还没有实现Serializable 接口。

    如果您使用 findAllfindBy 之类的方法获取对象,这些方法返回 Entity 对象而不是 php 数组,就会发生这种情况。

    所以我只是跳过了那些本机方法并编写了学说查询来获取数据。 也可以实现Serializable接口。

    【讨论】:

    • 像魅力一样工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-14
    • 1970-01-01
    • 2020-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多