From 76b25f3bca70782593c0d238385d70bc68767050 Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Fri, 11 Aug 2023 19:18:11 +0200 Subject: [PATCH] add form error handle in inline edit action refill the form using last request --- .../Controller/Admin/Crud/CrudController.php | 30 ++++++++++++++++--- .../views/admin/crud/index.html.twig | 2 +- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/src/core/Controller/Admin/Crud/CrudController.php b/src/core/Controller/Admin/Crud/CrudController.php index cbb12e9..95dd2d8 100644 --- a/src/core/Controller/Admin/Crud/CrudController.php +++ b/src/core/Controller/Admin/Crud/CrudController.php @@ -142,9 +142,23 @@ abstract class CrudController extends AdminController call_user_func_array($callback, [$builder, $entity]); - $form = $builder->getForm(); $redirectTo = $request->query->get('redirectTo'); + $form = $builder->getForm(); + $session = $request->getSession(); + + $lastRequestId = sprintf('inline_request_%s_%s', get_class($entity), $entity->getId()); + $lastRequest = $session->get($lastRequestId); + + if ($lastRequest !== null && !$request->isMethod('POST')) { + $fakeRequest = Request::create( + uri: $request->getUri(), + method: 'POST', + parameters: [$form->getName() => $lastRequest] + ); + $form->handleRequest($fakeRequest); + } + if ($request->isMethod('POST')) { $form->handleRequest($request); @@ -153,13 +167,21 @@ abstract class CrudController extends AdminController call_user_func_array($beforeUpdate, [$entity, $form, $request]); } + $session->remove($lastRequestId); $entityManager->update($entity); $this->addFlash('success', 'The data has been saved.'); - } else { - $this->addFlash('warning', 'The form is not valid.'); + + return $this->redirect($redirectTo); } - return $this->redirect($redirectTo); + $session->set($lastRequestId, $request->request->get('form')); + $this->addFlash('warning', 'The form is not valid.'); + + return $this->redirect(sprintf( + '%s?data-modal=%s', + $redirectTo, + urlencode($request->getUri()) + )); } return $this->render($configuration->getView('inline_edit'), [ diff --git a/src/core/Resources/views/admin/crud/index.html.twig b/src/core/Resources/views/admin/crud/index.html.twig index 34e5eaf..cdf4cc0 100644 --- a/src/core/Resources/views/admin/crud/index.html.twig +++ b/src/core/Resources/views/admin/crud/index.html.twig @@ -204,7 +204,7 @@ entity: item.id, context: context, label: label, - redirectTo: app.request.uri, + redirectTo: app.request.pathInfo, }|merge(configuration.pagerouteparams('inline_edit'))) }}" data-modal-create> {{ render_field(item, config, configuration.defaultlocale) }}