Doctrine ORM で Silex を使用しています。すべて正常に動作していましたが、理解できない問題が発生しました。
私は名前空間 Lpdq\Model\Entity に Entity News を持っています。これは名前空間 Lpdq\Model の別のクラス News を拡張します。このクラスには教義のためのいくつかのメソッドとイベント前後のメソッドが含まれています。
私のエンティティニュース
<?php
namespace Lpdq\Model\Entity;
/**
* News
*
* @Table(name="news")
* @Entity(repositoryClass="Lpdq\Model\Entity\Repository\News")
*/
class News extends Lpdq\Model\News{
/*some properties/methods*/
}
私のスーパークラスのニュース
<?php
namespace Lpdq\Model;
/**
* News
*
* @MappedSuperclass
* @HasLifecycleCallbacks
*/
class News{
/**
* @PrePersist
*/
public function prePersist()
{
$this->setCreated(new \DateTime());
$this->setUpdated(new \DateTime());
}
/**
* @PreUpdate
*/
public function preUpdate()
{
$this->setUpdated(new \DateTime());
}
/*...some methods...*/
}
私のコントローラーでは、エンティティをインスタンス化して永続化/フラッシュするだけです
<?php
namespace Lpdq\Controller;
use Silex\Application;
use Symfony\Component\HttpFoundation\Request;
use Lpdq\Model\Entity\News;
class NewsController {
public function addAction( Request $request, Application $app) {
$news = new News();
$news->setTitle('test');
/*...*/
$app['orm.em']->persist($news);
$app['orm.em']->flush();
/*...*/
}
}
私の問題は、エンティティを永続化するときに prePersist/preUpdate メソッドが呼び出されないことです。 (作成および更新されたプロパティがnullであるため、エラーが発生します)
エンティティ News を HasLifecycleCallbacks として設定し、同じ prePersist/Update メソッドを配置すると、それらがトリガーされます。
私がここにいる間、エンティティを拡張して事前/事後およびその他の方法を配置する方法が良いか悪いか疑問に思っていますか?