首页 > 解决方案 > ORM HasLifecycleCallbacks 不适用于抽象父类

问题描述

我有这个带有一些限制的抽象父类。

namespace FileBundle\AbstractClass;

use Symfony\Component\HttpFoundation\File\UploadedFile;
use FileBundle\Interfaces\IFileOid;
use FileBundle\Traits\TFileOid;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\MappedSuperclass()
 * @ORM\HasLifecycleCallbacks()
 */
abstract class AbstractFileOid implements IFileOid
{
    /**
     * Set trait
     */
    use TFileOid;

    /**
     * @param UploadedFile|null $fileTemp
     *
     * @return void
     */
    abstract public function init(UploadedFile $fileTemp = null);

    // and some next code here
}

如您所见,我在那里使用了一个名为“TFileOid”的特征,其中包含一些使用 orm 生命周期事件的方法,如 PostLoad()、PostPersist() 等。

并且有扩展抽象父级的子类(实体):

namespace FileBundle\Entity;

use Symfony\Component\HttpFoundation\File\UploadedFile;
use FileBundle\AbstractClass\AbstractFileOid;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity()
 * @ORM\Table("files")
 */
class MyFile extends AbstractFileOid
{
    /**
     * @var string
     * @ORM\Id
     * @ORM\Column(type="string", length=40)
     */
    private $hash;

    /**
     * @ORM\Column(type = "oid", nullable = true)
     */
    private $data;

    // and some next code
}

我的问题是当我在父抽象类上使用 ORM\HasLifecycleCallbacks 时,不会调用特征中的事件方法。当我将 ORM\HasLifecycleCallbacks 移动到子类时,它会起作用。我尝试了在父级上使用“MappedSuperclass”定义的解决方案,但没有成功。

有没有办法在父类而不是子类上定义 ORM\HasLifecycleCallbacks ?

标签: phpsymfonydoctrine-ormormdoctrine

解决方案


推荐阅读