From 7a313b4b639261d81a39b0b056fa4758b8503cf6 Mon Sep 17 00:00:00 2001 From: Neil Peyssard Date: Tue, 25 Jul 2023 17:19:11 +0200 Subject: [PATCH] Add PreSave and PostSave events --- Controller/ParameterController.php | 17 +++++++++++++++ Event/PostSaveEvent.php | 19 +++++++++++++++++ Event/PreSaveEvent.php | 33 ++++++++++++++++++++++++++++++ Event/RequestEventTrait.php | 21 +++++++++++++++++++ Event/ResponseEventTrait.php | 33 ++++++++++++++++++++++++++++++ README.md | 10 +++++++++ 6 files changed, 133 insertions(+) create mode 100644 Event/PostSaveEvent.php create mode 100644 Event/PreSaveEvent.php create mode 100644 Event/RequestEventTrait.php create mode 100644 Event/ResponseEventTrait.php diff --git a/Controller/ParameterController.php b/Controller/ParameterController.php index d5207ab..5f32cbe 100644 --- a/Controller/ParameterController.php +++ b/Controller/ParameterController.php @@ -2,6 +2,8 @@ namespace Sherlockode\ConfigurationBundle\Controller; +use Sherlockode\ConfigurationBundle\Event\PostSaveEvent; +use Sherlockode\ConfigurationBundle\Event\PreSaveEvent; use Sherlockode\ConfigurationBundle\Event\SaveEvent; use Sherlockode\ConfigurationBundle\Form\Type\ImportType; use Sherlockode\ConfigurationBundle\Form\Type\ParametersType; @@ -122,6 +124,14 @@ public function listAction(Request $request) if ($form->isSubmitted() && $form->isValid()) { $params = $form->getData(); + + $preSaveEvent = new PreSaveEvent($request, $params); + $this->eventDispatcher->dispatch($preSaveEvent); + + if ($preSaveEvent->getResponse()) { + return $preSaveEvent->getResponse(); + } + foreach ($params as $path => $value) { $this->parameterManager->set($path, $value); } @@ -129,6 +139,13 @@ public function listAction(Request $request) $this->eventDispatcher->dispatch(new SaveEvent()); + $postSaveEvent = new PostSaveEvent($request); + $this->eventDispatcher->dispatch($postSaveEvent); + + if ($postSaveEvent->getResponse()) { + return $postSaveEvent->getResponse(); + } + return $this->redirectToRoute('sherlockode_configuration.parameters'); } diff --git a/Event/PostSaveEvent.php b/Event/PostSaveEvent.php new file mode 100644 index 0000000..b017c3a --- /dev/null +++ b/Event/PostSaveEvent.php @@ -0,0 +1,19 @@ +request = $request; + } +} diff --git a/Event/PreSaveEvent.php b/Event/PreSaveEvent.php new file mode 100644 index 0000000..6f6f4bc --- /dev/null +++ b/Event/PreSaveEvent.php @@ -0,0 +1,33 @@ +request = $request; + $this->parameters = $parameters; + } + + /** + * @return array + */ + public function getParameters() + { + return $this->parameters; + } +} diff --git a/Event/RequestEventTrait.php b/Event/RequestEventTrait.php new file mode 100644 index 0000000..d94cc19 --- /dev/null +++ b/Event/RequestEventTrait.php @@ -0,0 +1,21 @@ +request; + } +} diff --git a/Event/ResponseEventTrait.php b/Event/ResponseEventTrait.php new file mode 100644 index 0000000..f09dc43 --- /dev/null +++ b/Event/ResponseEventTrait.php @@ -0,0 +1,33 @@ +response; + } + + /** + * @param Response $response + * + * @return $this + */ + public function setResponse(Response $response) + { + $this->response = $response; + + return $this; + } +} diff --git a/README.md b/README.md index e739f17..d5bed46 100644 --- a/README.md +++ b/README.md @@ -265,6 +265,16 @@ So be sure to generate your credentials with the following command: $ php bin/console secrets:generate-keys ``` +### Events + +When parameters are saved in database, multiple events are dispatched + +* `Sherlockode\ConfigurationBundle\Event\PreSaveEvent` is dispatch before saving parameters; +* `Sherlockode\ConfigurationBundle\Event\SaveEvent` is dispatch just after saving new parameters values + in database; +* `Sherlockode\ConfigurationBundle\Event\PostSaveEvent` is dispatch just after the SaveEvent. It can be + useful for customizing redirection or adding flash message for example; + ## Field types ### Default types