У меня такая ситуация:
Абстрактный класс:
abstract class AbstractBase
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
* @var integer
*/
protected $id;
/**
* @ORM\Column(type="datetime", name="updated_at")
* @var \DateTime $updatedAt
*/
protected $updatedAt;
/**
* @ORM\PreUpdate
*/
public function setUpdatedAt()
{
die('THIS POINT IS NEVER REACHED');
$this->updatedAt = new \DateTime();
}
}
Класс бетона:
/**
* @ORM\Entity(repositoryClass="Entity\Repository\UserRepository")
* @ORM\Table(name="users")
* @ORM\HasLifecycleCallbacks
*/
class User extends AbstractBase
{
// some fields, relations and setters/getters defined here, these all work as expected.
}
Тогда я называю это в моем контроллере так:
$user = $this->em->find('Entity\User', 1);
// i call some setters here like $user->setName('asd');
$this->em->flush();
die('end');
Все работает как положено, поэтому поле id из абстрактного класса создается для объекта User, я могу получить к нему доступ и т. Д.
Проблема в том, что строка «die (« ЭТА ТОЧКА НЕ ДОСТИГНУТА »)» никогда не достигается. (Обратите внимание на @ORM \ PreUpdate) Это означает, что lifecycleCallbacks не вызываются
унаследованные объекты. Это ошибка, или есть причина для этого?