From 0351f6c84fa0333ca96fa95faede13e752aac691 Mon Sep 17 00:00:00 2001 From: Dragos Protung Date: Mon, 27 Apr 2026 15:04:07 +0200 Subject: [PATCH] Support EasyAdmin 4.29.6 --- src/Controller/BaseCrudDtoController.php | 13 +++++-------- src/Dto/EntityDtoInstanceSetter.php | 20 ++++++++++++++++++++ 2 files changed, 25 insertions(+), 8 deletions(-) create mode 100644 src/Dto/EntityDtoInstanceSetter.php diff --git a/src/Controller/BaseCrudDtoController.php b/src/Controller/BaseCrudDtoController.php index ffe6e90..868f935 100644 --- a/src/Controller/BaseCrudDtoController.php +++ b/src/Controller/BaseCrudDtoController.php @@ -23,6 +23,7 @@ use EasyCorp\Bundle\EasyAdminBundle\Field\BooleanField; use EasyCorp\Bundle\EasyAdminBundle\Security\Permission; use Override; +use Protung\EasyAdminPlusBundle\Dto\EntityDtoInstanceSetter; use Psl\Str; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; @@ -98,8 +99,7 @@ public function edit(AdminContext $context): KeyValueStore|Response $entityInstance = $entityDto->getInstance(); $dto = $this->createDtoFromEntity($entityInstance); - $entityDto->setInstance(null); - $entityDto->setInstance($dto); + EntityDtoInstanceSetter::setInstance($entityDto, $dto); $event = new BeforeCrudActionEvent($context); $this->container->get('event_dispatcher')->dispatch($event); @@ -156,8 +156,7 @@ public function edit(AdminContext $context): KeyValueStore|Response $this->processUploadedFiles($editForm); $this->updateEntityFromDto($entityInstance, $dto); - $entityDto->setInstance(null); - $entityDto->setInstance($entityInstance); + EntityDtoInstanceSetter::setInstance($entityDto, $entityInstance); $event = new BeforeEntityUpdatedEvent($entityInstance); $this->container->get('event_dispatcher')->dispatch($event); @@ -216,8 +215,7 @@ public function new(AdminContext $context): KeyValueStore|Response throw new InsufficientEntityPermissionException($context); } - $context->getEntity()->setInstance(null); - $context->getEntity()->setInstance($this->createDto()); + EntityDtoInstanceSetter::setInstance($context->getEntity(), $this->createDto()); $this->container->get(FieldFactory::class)->processFields($context->getEntity(), new FieldCollection($this->configureFields(Crud::PAGE_NEW)), Crud::PAGE_NEW); $context->getCrud()->setFieldAssets($this->getFieldAssets($context->getEntity()->getFields())); $this->container->get(ActionFactory::class)->processEntityActions($context->getEntity(), $context->getCrud()->getActionsConfig()); @@ -227,8 +225,7 @@ public function new(AdminContext $context): KeyValueStore|Response /** @var TDto $entityInstance */ $entityInstance = $newForm->getData(); - $context->getEntity()->setInstance(null); - $context->getEntity()->setInstance($entityInstance); + EntityDtoInstanceSetter::setInstance($context->getEntity(), $entityInstance); if ($newForm->isSubmitted() && $newForm->isValid()) { $this->processUploadedFiles($newForm); diff --git a/src/Dto/EntityDtoInstanceSetter.php b/src/Dto/EntityDtoInstanceSetter.php new file mode 100644 index 0000000..9fd460f --- /dev/null +++ b/src/Dto/EntityDtoInstanceSetter.php @@ -0,0 +1,20 @@ +setValue($entityDto, $instance); + + $primaryKeyProperty = new ReflectionProperty($entityDto, 'primaryKeyValue'); + $primaryKeyProperty->setValue($entityDto, null); + } +}