为什么不是';当我在文档文件上使用注释时,应用生命周期回调的t symfony2原则


why isn't symfony2 doctrine applying lifecycle callback when I use annotations on document file

我试图将基本上存储文档创建日期的代码放在同一个文档文件上(我看过很多教程,在services.xml文件等中注册了一个监听器。我不希望这样……我希望所有代码都在同一页上)。

所以基本上我的文档文件名为Driver.php。这是我正在使用的代码:

use Doctrine'ODM'MongoDB'Mapping'Annotations as MongoDB;
use Doctrine'ORM'Mapping as ORM;
/**
 * @MongoDB'Document(repositoryClass="St'AppBundle'Repository'DriverRepository", requireIndexes=true)
 * @ORM'HasLifecycleCallbacks()
 */
class Driver
{
  .. 
    /**
     * @MongoDB'int
     * @MongoDB'Index
     */
    protected $createdAt;

    /**
     * Set createdAt
     *
     * @param int $createdAt
     * @return Driver
     */
    public function setCreatedAt($createdAt)
    {
        $this->createdAt = $createdAt;
        return $this;
    }
    /**
     * Get createdAt
     *
     * @return int $createdAt
     */
    public function getCreatedAt()
    {
        return $this->createdAt;
    }
    .. 
    /**
     * @ORM'PrePersist
     */
    public function storeDateCrated()
    {
        $this->createdAt = new DateTime();
    }
}

这就是我所要做的一切:

/**
 * @MongoDB'PrePersist
 */
public function storeDateCrated()
{
    $date=  new 'DateTime();
    $this->createdAt = $date->getTimestamp();
}

我删除了这条

use Doctrine'ORM'Mapping as ORM;

尽管这并没有真正的关联。。这段代码是基于我继承的一个项目(来自symfony专家……我对symfony一无所知)。。问题是,当我在整个代码库中搜索PrePersist时,我一无所获。。但后来我通过运行在所有以前的提交中搜索该术语

git log -SPreCommit // general way: git log -Sword when searching for "word"

这给了我一个所有使用了preCommit的提交哈希的列表。。我打开其中一个提交,发现使用了这种语法。。瞧!

您使用的是DoctrineORM的注释。这只适用于关系数据库,如MySql、postgreSql。相反,使用这个:

use Doctrine'ODM'MongoDB'Mapping'Annotations'HasLifecycleCallbacks;
/**
 * @HasLifecycleCallbacks()
 */
 class Driver
 {