生命周期回调prePersist未触发(使用YAML文件)

时间:2016-04-27 19:36:18

标签: doctrine symfony

我按照本书学习Symfony。在本教程中,我成功配置了prePersist事件(在插入时设置createdAt字段)。

现在我尝试使用YAML文件而不是注释来尝试相同的操作。这是我的orm.yml文件:

AppBundle\Entity\Chronicle:
    type: entity
    table: chronicles
    id:
        id:
            type: integer
            generator: {strategy: AUTO}
    fields:
        name:
            type: string
            length: 256
        createdAt:
            type: datetime

    manyToOne:
        creator: 
            targetEntity: User
            inversedBy: chronicles
            joinColumn: 
                name: user_id
                referencedColumnName: id
        game:
            targetEntity: Game
            joinColumn:
                name: game_id
                referencedColumnName: id

    oneToMany:
        characters:
            targetEntity: Character
            mappedBy: chronicle

    lifeCycleCallbacks:
        prePersist: [ setCreatedAtValue ]

这是我的实体类的片段:

class Chronicle
{
    private $id;

    private $name;
    private $createdAt;

    // Associations
    private $game;
    private $creator;
    private $characters;
    // TODO: users or user relationships

    // Constructor
    public function __construct(User $creator=null) {
        $this->characters = new ArrayCollection();
        $this->creator = $creator;
    }

    /**
    * Set createdAt at the current time.
    *
    * (Lifecycle callback)
    */
    public function setCreatedAtValue() 
    {
        $this->createdAt = new \DateTime();
    }
    // ...
}

但是从不调用setCreatedAtValue()方法。所以,当我尝试插入一个对象时,我得到一个异常。

我注意到在使用注释时我必须通过@ORM \ HasLifecycleCallbacks()注释告诉生命周期回调的存在,但是我没有找到与yml相同的任何地方,或者是否需要注释。 / p>

在一个教程中,我发现我应该在services.yml中注册回调,但教程从未提及过,我还没有在其他任何地方找到它。

1 个答案:

答案 0 :(得分:0)

如果您更改" lifeCycleCallbacks"将会调用它。 to" lifecycleCallbacks"。