У меня есть этот абстрактный родительский класс с некоторыми ограничениями.
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 для родительского, а не для дочернего класса?
Скобку убрал, но все равно не работает
Даже после очистки кеша?
да. Кеш Symfony очищен, а кеш доктрины очищен APCu. Все еще не работает.
Вы используете HasLifecycleCallbacks
для ребенка?
Нет. Я использую только ORM \ Entity () и ORM \ Table («файлы») в дочернем классе.
Скобки не влияют на аннотации
убрать скобки с
@ORM\MappedSuperclass()
и@ORM\HasLifecycleCallbacks()