Наследование аннотаций обратного вызова Symfony Lifecycle - PullRequest
0 голосов
/ 14 марта 2019

Я нахожусь на 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

1 Ответ

0 голосов
/ 14 марта 2019

Я бы порекомендовал создать для этого отдельный класс.Черта должна быть отличным выбором.У меня есть что-то подобное в моих проектах.

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 '';
    }
}
...