ブログ アプリを作成しているとします。私のPosts
エンティティには、、、、およびプロパティが必要ですcreateddate
(エンティティに対して setName() を呼び出すとスラッグが生成されます)。このコードを再利用したいが、オンデマンドで再利用したい。たとえば、機能を使用したいが機能を使用したくないエンティティがある場合があります。modifieddate
name
slug
Log
createddate
modifieddate
slug
トレイト(ミックスイン) または抽象クラスを介したクラス継承は、 is-aテストに合格しないため、この機能を再利用するには不十分な、または少なくとも不適切なアプローチのようです。結局のところ、エンティティには作成日がありますが、それ自体は作成日ではありません..したがって、継承ではなく構成を使用する必要がありますよね?. ただし、オブザーバーはここでは機能しないようです。この機能を on-demandで使用したいのですが、Doctrine で注釈とオブジェクト プロパティを使用すると、 Reflectionを使用しないと水平方向の注入が困難になる (そして費用がかかる?) ように見えるからです。
いくつかのコードを示して質問を少し単純化するには、DRYまたは適切な OOP (構成/継承の適切な使用) の慣行を破ることなく、次の定義と機能をエンティティに一度に挿入できますか?
/**
* @var DateTime $createddate
*
* @ORM\Column(type="datetime")
*/
private $createddate;
/**
* @ORM\PrePersist
*/
public function createddatePrePersist() {
$this->createddate = new \DateTime('now');
}