5
5
namespace Setono \SyliusMeilisearchPlugin \Controller \Action ;
6
6
7
7
use Doctrine \Persistence \ManagerRegistry ;
8
+ use Psr \EventDispatcher \EventDispatcherInterface ;
8
9
use Setono \Doctrine \ORMTrait ;
9
10
use Setono \SyliusMeilisearchPlugin \Engine \SearchEngineInterface ;
10
11
use Setono \SyliusMeilisearchPlugin \Engine \SearchRequest ;
12
+ use Setono \SyliusMeilisearchPlugin \Event \Search \SearchRequestCreated ;
13
+ use Setono \SyliusMeilisearchPlugin \Event \Search \SearchResponseParametersCreated ;
14
+ use Setono \SyliusMeilisearchPlugin \Event \Search \SearchResultReceived ;
11
15
use Setono \SyliusMeilisearchPlugin \Form \Builder \SearchFormBuilderInterface ;
12
16
use Setono \SyliusMeilisearchPlugin \Model \IndexableInterface ;
13
17
use Symfony \Component \HttpFoundation \Request ;
@@ -23,13 +27,18 @@ public function __construct(
23
27
private readonly Environment $ twig ,
24
28
private readonly SearchFormBuilderInterface $ searchFormBuilder ,
25
29
private readonly SearchEngineInterface $ searchEngine ,
30
+ private readonly EventDispatcherInterface $ eventDispatcher ,
26
31
) {
27
32
$ this ->managerRegistry = $ managerRegistry ;
28
33
}
29
34
30
35
public function __invoke (Request $ request ): Response
31
36
{
32
- $ searchResult = $ this ->searchEngine ->execute (SearchRequest::fromRequest ($ request ));
37
+ $ searchRequestCreatedEvent = new SearchRequestCreated ($ request , SearchRequest::fromRequest ($ request ));
38
+ $ this ->eventDispatcher ->dispatch ($ searchRequestCreatedEvent );
39
+
40
+ $ searchResult = $ this ->searchEngine ->execute ($ searchRequestCreatedEvent ->searchRequest );
41
+ $ this ->eventDispatcher ->dispatch (new SearchResultReceived ($ searchResult ));
33
42
34
43
$ searchForm = $ this ->searchFormBuilder ->build ($ searchResult );
35
44
$ searchForm ->handleRequest ($ request );
@@ -49,10 +58,13 @@ public function __invoke(Request $request): Response
49
58
$ items [] = $ item ;
50
59
}
51
60
52
- return new Response ( $ this -> twig -> render ('@SetonoSyliusMeilisearchPlugin/search/index.html.twig ' , [
61
+ $ searchResponseParametersCreatedEvent = new SearchResponseParametersCreated ('@SetonoSyliusMeilisearchPlugin/search/index.html.twig ' , [
53
62
'searchResult ' => $ searchResult ,
54
63
'searchForm ' => $ searchForm ->createView (),
55
64
'items ' => $ items ,
56
- ]));
65
+ ], $ request );
66
+ $ this ->eventDispatcher ->dispatch ($ searchResponseParametersCreatedEvent );
67
+
68
+ return new Response ($ this ->twig ->render ($ searchResponseParametersCreatedEvent ->template , $ searchResponseParametersCreatedEvent ->context ));
57
69
}
58
70
}
0 commit comments