我按照本书学习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中注册回调,但教程从未提及过,我还没有在其他任何地方找到它。
答案 0 :(得分:0)
如果您更改" lifeCycleCallbacks"将会调用它。 to" lifecycleCallbacks"。