2013-04-08 96 views
1

我有以下情況:擴展DataObject類的(Doctrine實體)ContentCategory。 DataObject類具有以下函數onPrePersist:擴展功能與學說ORM註釋

/** 
* @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功能,是設置當該對象被創建日期時間或者是延伸DataObject類的任何其他對象/實體。

- <編輯> -

我現在添加了一個構造方法ContentCategory過程是這樣的:

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

這樣學說是建立一個新的實體時,執行相應的功能onPersist 。另一種情況是當一個實體正在更新時,與教條。我想設置一個Modified_date。在這種情況下,DataObject類中會有這樣的函數。

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

教義ORM註解(更新前)已加入,將確保該功能(上圖)將在某個對象的更新語句excuted。問題是,如何在擴展數據對象的對象中調用這些函數

回答

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 
{ 
    ... 
} 
+0

謝謝,我不知道Doctrine ORM註釋:MappedSuperclass。有了這個註解,它不會爲超級(父級)類創建一個實體。非常感謝,打開我的眼睛! – Kwido 2013-04-09 14:12:13