我遇到以下情况:扩展DataObject类的(Doctrine Entity)ContentCategory。 DataObject类具有以下函数onPrePersist:
/**
* @ORM\HasLifecycleCallbacks
*/
class DataObject implements InputFilterAwareInterface
{
...
/** @ORM\PrePersist */
public function onPrePersist()
{
//using Doctrine DateTime here
$this->creation_date = new \DateTime('now');
}
ContentCategory类也需要此功能。当我将此函数放在ContentCategory类中时,它可以正常工作。有没有一种方法,ContentCategory类可以使用相同的函数onPrePersist()而无需在类中自己定义它?
* @ORM\HasLifecycleCallbacks()
*/
class ContentCategory extends DataObject implements InputFilterAwareInterface
{
...
}
为对象提供onPrePersist函数的原因是在创建此对象时设置DateTime或者是在扩展DataObject类的任何其他对象/实体。
- <已编辑> -
我目前在ContentCategory中添加了一个构造方法,如下所示:
public function __construct() {
parent::onPrePersist();
}
这样,Doctrine在创建新实体时执行onPersist函数。另一种情况是使用Doctrine更新enttiy。我想设置一个Modified_date。在这种情况下,DataObject类中会有这样的函数。
/**
* @ORM\HasLifecycleCallbacks
*/
class DataObject implements InputFilterAwareInterface
{
...
/**
* @ORM\PreUpdate
*/
public function onUpdate()
{
$this->last_modified_date = new \DateTime('now');
}
已添加的Doctrine ORM Annotation(PreUpdate)将确保在对象的更新语句中执行该函数(上面)。问题是,如何在扩展DataObject的对象中调用这些函数
答案 0 :(得分:1)
/**
* @ORM\MappedSuperclass
* @ORM\HasLifecycleCallbacks
*/
class TestimonialSuperclass
{
/**
* @ORM\PreFlush
*/
public function onPreFlush ()
{
echo 123;
}
}
/**
* @ORM\Entity
* @ORM\Table(name="testimonials")
* @ORM\HasLifecycleCallbacks
*/
class Testimonial extends TestimonialSuperclass
{
...
}