Php Symfony2:slug和timestamp方法放在哪里?

Php Symfony2:slug和timestamp方法放在哪里?,php,symfony,doctrine-orm,entity,Php,Symfony,Doctrine Orm,Entity,我正在编写一个服务,它将处理文章(CRUD) 持久性层由ArticleManager>处理,它执行存储库和CRUD操作 现在我想实现两个属性:createdAt和>updatedAt 我现在的问题是我应该把它们放在哪里: 在实体中,在ArticleManager中,在其他地方 致以最良好的祝愿, 博多 啊, 我明白了,FOSUserBundle使用EventListener处理此任务: 但是谢谢你的帮助:) 在实体中,因为它们在逻辑上属于实体。好吧,有一个捆绑包,用于这些东西。它具有时间可伸缩

我正在编写一个服务,它将处理文章(CRUD)

持久性层由ArticleManager>处理,它执行存储库和CRUD操作

现在我想实现两个属性:createdAt和>updatedAt

我现在的问题是我应该把它们放在哪里: 在实体中,在ArticleManager中,在其他地方

致以最良好的祝愿, 博多

啊,

我明白了,FOSUserBundle使用EventListener处理此任务:

但是谢谢你的帮助:)


在实体中,因为它们在逻辑上属于实体。

好吧,有一个捆绑包,用于这些东西。它具有时间可伸缩性和可伸缩性

如果您想自己做,那么位置肯定在实体本身中,因为您不想在控制器中乱来。以下是我在不使用DoctrineExtensionsBundle的情况下如何创建时间表:

/**
 * @ORM\Entity
 * @ORM\Table(name="entity")
 * @ORM\HasLifecycleCallbacks
 */
class Entity {
    // ...

    /**
     * @ORM\Column(name="created_at", type="datetime", nullable=false)
     */
    protected $createdAt;

    /**
     * @ORM\Column(name="updated_at", type="datetime", nullable=false)
     */
    protected $updatedAt;

    /**
     * @ORM\prePersist
     */
    public function prePersist() {
        $this->createdAt = new \DateTime();
        $this->updatedAt = new \DateTime();
    }

    /**
     * @ORM\preUpdate
     */
    public function preUpdate() {
        $this->updatedAt = new \DateTime();
    }

    // ...

}

至于我不使用捆绑包的决定:当symfony2作为稳定版本发布时,这个捆绑包不存在(或者它不稳定,我不记得了),所以我开始自己做,如下所示。因为它的开销很小,我一直这样做,从来没有觉得有必要改变它。如果您需要Slagable或想要简单地保留它,请尝试捆绑

仅供参考,
new\DateTime
足以获取当前日期时间。您是对的。不知道为什么我把它放在那里,但“现在”确实是默认值。谢谢你的提示!将在上面删除它!您好,ArticleBundle用作服务,我通过articleManager访问实体。因此,放置一个受保护的方法generateSlug,并在createArticle方法中设置createdAt属性,在updateArticle方法中设置updatedAt属性,不是更好吗?我希望我写的是可以理解的:)为什么这样更好?有没有任何例子可以让你想到你想在哪里更新你的实体并保持更新的数据不变?如果没有,请将代码保留在实体中,这样就不必让类知道此时间戳的功能。您的经理不需要知道何时或如何更新此类内部行为。我同意!但是我应该如何详细地实现它:我有一个抽象类,它包含setter和getter以及属性,这就是模型/文章。这个类被扩展为ORM、ODM、CouchDB、Propel等等。我可以用构造函数处理createdAt,但updatedAt和slug是什么?嗨,ArticleBundle用作服务,我通过articleManager访问实体。因此,放置一个受保护的方法generateSlug并在createArticle方法中设置createdAt属性,在updateArticle方法中设置updatedAt属性不是更好吗?我希望我写的这篇文章可以理解:)
/**
 * @ORM\Entity
 * @ORM\Table(name="entity")
 * @ORM\HasLifecycleCallbacks
 */
class Entity {
    // ...

    /**
     * @ORM\Column(name="created_at", type="datetime", nullable=false)
     */
    protected $createdAt;

    /**
     * @ORM\Column(name="updated_at", type="datetime", nullable=false)
     */
    protected $updatedAt;

    /**
     * @ORM\prePersist
     */
    public function prePersist() {
        $this->createdAt = new \DateTime();
        $this->updatedAt = new \DateTime();
    }

    /**
     * @ORM\preUpdate
     */
    public function preUpdate() {
        $this->updatedAt = new \DateTime();
    }

    // ...

}