我使用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 /更新方法,它们被触发。
虽然我在这里,我想知道如果我扩展我的实体的方式,把前/后和其他方法是好的或不好的做法?