Я использую Silex с Doctrine ORM, все работает нормально, но у меня есть проблема, которую я не могу понять.Silex + Doctrine ORM не запускает события при установке на @MappedSuperclass
У меня есть Новости сущности в пространстве имен Lpdq \ Model \ Entity, который расширяет другой класс Новости в пространстве имен Lpdq \ Model, который содержит некоторые методы и методы pre/post event для доктрины.
Мой лица Новости
<?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 не вызывается, когда я сохраняю свою сущность. (Так что я получаю сообщение об ошибке, потому что мои свойства, созданные и обновляемые нулевые)
Если я устанавливаю свою сущность новостей как HasLifecycleCallbacks и поставить тот же метод prePersist/Update, они срабатывают.
В то время как я здесь, мне интересно, способ, которым я расширяю свои сущности, чтобы поставить pre/post и другие методы - хорошая или плохая практика?