使用Doctrine ORM Annotation扩展功能

时间:2013-04-08 13:51:01

标签: zend-framework orm doctrine-orm doctrine

我遇到以下情况:扩展DataObject类的(Doctrine Entity)ContentCategory。 DataObject类具有以下函数onPrePersist:

/**
*  @ORM\HasLifecycleCallbacks
*/
class DataObject implements InputFilterAwareInterface
{
 ...
 /** @ORM\PrePersist */
 public function onPrePersist()
 {
     //using Doctrine DateTime here
     $this->creation_date = new \DateTime('now');
 }

ContentCategory类也需要此功能。当我将此函数放在ContentCategory类中时,它可以正常工作。有没有一种方法,ContentCategory类可以使用相同的函数onPrePersist()而无需在类中自己定义它?

* @ORM\HasLifecycleCallbacks()
*/
class ContentCategory extends DataObject implements InputFilterAwareInterface
{
 ...
}

为对象提供onPrePersist函数的原因是在创建此对象时设置DateTime或者是在扩展DataObject类的任何其他对象/实体。

- <已编辑> -

我目前在ContentCategory中添加了一个构造方法,如下所示:

public function __construct() {
    parent::onPrePersist();
}

这样,Doctrine在创建新实体时执行onPersist函数。另一种情况是使用Doctrine更新enttiy。我想设置一个Modified_date。在这种情况下,DataObject类中会有这样的函数。

/**
*  @ORM\HasLifecycleCallbacks
*/
class DataObject implements InputFilterAwareInterface
{
 ...
/**
 * @ORM\PreUpdate
 */
public function onUpdate()
{
    $this->last_modified_date = new \DateTime('now');
}

已添加的Doctrine ORM Annotation(PreUpdate)将确保在对象的更新语句中执行该函数(上面)。问题是,如何在扩展DataObject的对象中调用这些函数

1 个答案:

答案 0 :(得分:1)

/**
 * @ORM\MappedSuperclass
 * @ORM\HasLifecycleCallbacks
 */
class TestimonialSuperclass
{
    /**
     * @ORM\PreFlush
     */
    public function onPreFlush ()
    {
        echo 123;
    }
}


/**
 * @ORM\Entity
 * @ORM\Table(name="testimonials")
 * @ORM\HasLifecycleCallbacks
 */
class Testimonial extends TestimonialSuperclass
{
   ...
}