我正在将 Silex 与 Doctrine ORM 一起使用,一切正常,但我遇到了一个我无法弄清楚的问题。
我在命名空间 Lpdq\Model\Entity 中有一个实体新闻,它扩展了命名空间 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 方法没有被调用。 (所以我收到一个错误,因为我创建和更新的属性为空)
如果我将我的实体 News 设置为 HasLifecycleCallbacks 并放置相同的 prePersist/Update 方法,它们就会被触发。
当我在这里时,我想知道我扩展实体以放置 pre/post 和其他方法的方式是好还是坏?