sry, если что-то не так точно, но я менее опытен с Symfony
У меня есть следующее отображение orm:
src/app/ExampleBundle/Resources/config/doctrine/Base.orm.yml
app\ExampleBundle\Entity\Base:
type: mappedSuperclass
fields:
createdAt:
type: datetime
nullable: true
options:
default: null
updatedAt:
type: datetime
nullable: true
options:
default: null
Это создает базу сущностей, которую я изменил, чтобы быть абстрактной
src/app/ExampleBundle/Entity/Base.php
abstract class Base {
...
}
У меня есть некоторые другие сущности, которые расширяют этот абстрактный класс, например,
src/app/ExampleBundle/Entity/Category.php
class Category extends Base
{
...
}
Теперь я попытался добавить прослушиватель, который устанавливает dateAt / updatedAt datetime при каждом сохранении для каждой сущности, котораярасширяет базовый объект
src/app/ExampleBundle/EventListener/BaseListener.php
namespace app\ExampleBundle\EventListener;
use Doctrine\ORM\Event\LifecycleEventArgs;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorage;
use Symfony\Component\Security\Core\User\UserInterface;
use app\ExampleBundle\Entity\Base;
class BaseListener
{
protected $tokenStorage;
public function __construct(TokenStorage $tokenStorage)
{
$this->tokenStorage = $tokenStorage;
}
public function prePersist(Base $base, LifecycleEventArgs $event)
{
$user = $this->tokenStorage->getToken()->getUser();
if (!$user instanceof UserInterface) {
$user = null;
}
if ($base->getCreatedAt() === null) {
$base->setCreated($user, new \DateTime());
} else {
$base->setUpdated($user, new \DateTime());
}
}
}
и добавляет его в комплекты services.yml
src/app/ExampleBundle/Resources/config
services:
app\ExampleBundle\EventListener\BaseListener:
arguments: ['@security.token_storage']
tags:
- { name: doctrine.orm.entity_listener, entity: app\ExampleBundle\Entity\Base, event: prePersist }
Symfony не выдает никаких исключений, но определенное событие, похоже, также не инициируется.
Я пытался изменить параметр сущности в службах на «реальную» категорию сущности, но все равно не было ошибки, ни событие не сработало.
Думаю, я сделал все так, как описано в документации.Но это все еще не работает.
Команда
debug:event-dispatcher
также не показывает событие
Итак, вопрос: что я сделал не так?