我正在使用Symfony 4,并且生命周期回调存在问题。我有两节课,一个模型和该模型的一个孩子。我希望模型的每个子级都具有相同的PrePersist回调,但是不会触发该回调。是正常现象还是我做错了什么?
<?php
// src/Models/QuestionModel.php
namespace App\Models;
use Doctrine\ODM\MongoDB\Mapping\Annotations as ODM;
use Symfony\Component\Validator\Constraints as Assert;
/**
* @ODM\MappedSuperclass
* @ODM\HasLifecycleCallbacks
*/
class QuestionModel
{
/**
* @ODM\Id(strategy="AUTO")
*/
protected $id;
/**
* @ODM\Field(type="date")
*/
protected $createdAt;
/**
* @ODM\PrePersist
*/
public function setCreatedAtValue() {
$this->createdAt = new \DateTime();
}
和孩子:
<?php
// src/Document/CDN/Question.php
namespace App\Document\CDN;
use Doctrine\ODM\MongoDB\Mapping\Annotations as ODM;
use App\Models\QuestionModel;
/**
* @ODM\Document(collection="CDNQuestion")
* @ODM\HasLifecycleCallbacks
*/
class Question extends QuestionModel
{
}
如果正常无法正常工作,您能解决我的问题吗?
Thx
答案 0 :(得分:0)
我建议为此创建一个单独的类。性格应该是绝佳的选择。我的项目中有类似的东西。
trait TimestampableTrait
{
/**
* @var \DateTime
*
* @ORM\Column(type="datetime", nullable=false)
*/
protected $createdAt;
/**
* @var \DateTime
*
* @ORM\Column(type="datetime", nullable=true)
*/
protected $updatedAt;
/**
* @ORM\PrePersist
*/
public function updateCreatedAt()
{
$this->createdAt = new \DateTime();
}
/**
* @ORM\PreUpdate
*/
public function preUpdate()
{
$this->updatedAt = new \DateTime();
}
/**
* @return \DateTime|null
*/
public function getUpdatedAt()
{
return $this->updatedAt;
}
/**
* @return \DateTime
*/
public function getCreatedAt()
{
return $this->createdAt;
}
/**
* @return string
*/
public function getCreatedAtFormatted()
{
if ($this->createdAt instanceof \DateTime) {
return $this->createdAt->format('d/m/Y h:i:s A');
}
return '';
}
}