我使用Silex與Doctrine ORM,一切工作正常,但我遇到了一個我無法弄清楚的問題。Silex + Doctrine ORM不會在@MappedSuperclass上設置時觸發事件
我在命名空間Lpdq \ Model \ Entity中有一個實體新聞,它在名稱空間Lpdq \ Model中擴展了另一個新聞類,其中包含一些方法和用於教義的事件/事件前/事件方法。
我的實體新聞
<?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)
如果我把我的實體作爲新聞和HasLifecycleCallbacks放在同一prePersist /更新方法,它們被觸發。
雖然我在這裏,我想知道如果我擴展我的實體的方式,把前/後和其他方法是好的或不好的做法?