假設我正在寫一個博客應用程序:我的Posts
實體應該有一個createddate
,modifieddate
,name
和slug
屬性(當我調用實體的setName()時會生成slu))。我想重複使用此代碼,但我也想重複使用按需。例如,我可能有一個Log
實體,它想要使用createddate
,但不是modifieddate
或slug
功能。如何重用Doctrine 2實體中的列和事件?
類繼承,無論是通過traits(混入)或抽象類,似乎是不充分的,或至少不正確的,方法來重用此功能,因爲它不通過是-一個測試。畢竟,實體has-a createddate,但不是一個createddate本身..所以我們應該使用組合而不是繼承,對吧?然而,observer在這裏似乎不起作用,因爲雖然我想要使用此功能按需,但Doctrine使用註解和對象屬性似乎會在不使用Reflection的情況下使水平注入變得困難(並且很昂貴?)。
爲了顯示一些代碼並簡化了一下問題:我可以在不破壞DRY或良好的OOP(正確使用組合/繼承)實踐的情況下,將下列定義和功能注入實體嗎?
/**
* @var DateTime $createddate
*
* @ORM\Column(type="datetime")
*/
private $createddate;
/**
* @ORM\PrePersist
*/
public function createddatePrePersist() {
$this->createddate = new \DateTime('now');
}