Я хотел бы инициировать создание новой сущности.
Может кто-нибудь сказать, возможно ли это и как?
В ожидании проблемы я привожу это решение для получения новой сущности в службе … но я нахожу ее недостаточно оптимизированной.
Вот (упрощенная выписка) моего кода с добавленным событием «onCreate» в слушателе:
Это работает хорошо, но я должен вызвать новую сущность, проходя мимо службы. Я хочу, чтобы моя новая сущность была заполнена напрямую при выполнении «$ entity = new entity ();»
abstract class serviceBaseEntity extends serviceBaseClass {
const ENTITY_CLASS = ''; // here class of entity
protected $classname;
protected $shortname;
protected $EntityManager;
protected $ObjectManager;
public function __construct(ContainerInterface $container, RequestStack $request_stack) {
parent::__construct($container, $request_stack);
$this->EntityManager = $this->container->get('doctrine.orm.entity_manager');
$this->ObjectManager = $this->container->get('doctrine')->getManager();
$this->addEventSubscriber(new serviceAnnotations($container, $request_stack));
$this->classname = $this->calledClassname::ENTITY_CLASS;
$this->shortname = (new ReflectionClass($this->classname))->getShortName();
return $this;
}
protected function addEventSubscriber(EventSubscriber $EventSubscriber) {
$this->EntityManager->getEventManager()->addEventSubscriber($EventSubscriber);
return $this;
}
public function getNew() {
$entity = new $this->classname;
$eventArgs = new LifecycleEventArgs($entity, $this->ObjectManager);
$this->EntityManager->getEventManager()->dispatchEvent(AnnotationsBase::onCreate, $eventArgs);
return $entity;
}
Возможно, вы могли бы использовать своего рода фабричный метод в вашей сущности с частным конструктором. Например:
Class MyEntity {
private function __construct( ) {
your code
}
public static function createEntity(your params) {
do some stuff
$e=new MyEntity();
do some other stuff
return $e;
}
}
Других решений пока нет …