|
11 | 11 | use Psr\Http\Server\MiddlewareInterface;
|
12 | 12 | use Psr\Http\Server\RequestHandlerInterface;
|
13 | 13 | use Psr\EventDispatcher\EventDispatcherInterface;
|
14 |
| -use Chiron\Pipeline\Event\BeforeMiddleware; |
15 |
| -use Chiron\Pipeline\Event\AfterMiddleware; |
| 14 | +use Chiron\Pipeline\Event\BeforeMiddlewareEvent; |
| 15 | +use Chiron\Pipeline\Event\AfterMiddlewareEvent; |
| 16 | +use Chiron\Pipeline\Event\BeforeHandlerEvent; |
| 17 | +use Chiron\Pipeline\Event\AfterHandlerEvent; |
16 | 18 |
|
17 | 19 | // TODO : exemple avec les événements !!!!
|
18 | 20 | //https://github.com/yiisoft/middleware-dispatcher/blob/master/src/MiddlewareStack.php#L98
|
19 | 21 |
|
| 22 | +//https://github.com/middlewares/utils/blob/master/src/Dispatcher.php#L43 |
| 23 | + |
20 | 24 | // TODO : vérifier qu'on a pas de doublons de middlewares : https://github.com/illuminate/routing/blob/f0908784ce618438be1a8b99f4613f62d18d8013/Router.php#L1256
|
21 | 25 |
|
22 | 26 | /**
|
|
34 | 38 | * @see https://www.php-fig.org/psr/psr-15/meta/
|
35 | 39 | */
|
36 | 40 | // TODO : actualiser la phpDoc et ajouter un @see sur les specs psr14 pour les events !!!!
|
| 41 | +// TODO : ajouter des tests pour les events |
37 | 42 | final class Pipeline implements RequestHandlerInterface
|
38 | 43 | {
|
39 | 44 | /** @var EventDispatcherInterface */
|
@@ -89,51 +94,35 @@ public function fallback(RequestHandlerInterface $handler): self
|
89 | 94 | */
|
90 | 95 | public function handle(ServerRequestInterface $request): ResponseInterface
|
91 | 96 | {
|
92 |
| - // TODO : remplacer cette appel au binding par un événement "BeforeMiddleware" : exemple : https://github.com/yiisoft/middleware-dispatcher/blob/master/src/MiddlewareStack.php#L85 |
93 |
| - // Attach a fresh instance of the request in the container. |
94 |
| - //$this->bindRequestInstance($request); // TODO : transformer ce bout de code en une propriété public de classe "$onHandle" de type callable qu'on executerait avant chaque Handle. Cela permettrait au package pipeline de ne plus avoir de dépendance avec le package container. |
| 97 | + // TODO : ajouter des tests pour ce package notamment sur les événements et le comportement en cas de throw d'exception s'assurer que le finaly fonctionne correctement !!! |
95 | 98 |
|
96 |
| - // TODO : code temporaire le temps d'ajouter un event dispatcher !!!! |
97 |
| - /* |
98 |
| - if ($this->beforeMiddleware !== null) { |
99 |
| - call_user_func_array($this->beforeMiddleware, [$request]); |
100 |
| - }*/ |
101 | 99 |
|
102 | 100 | $middleware = $this->middlewares[$this->position] ?? null;
|
103 | 101 |
|
104 |
| - //if (isset($this->middlewares[$this->position])) { |
105 | 102 | if ($middleware !== null) {
|
106 |
| - $this->dispatcher->dispatch(new BeforeMiddleware($middleware, $request)); |
107 |
| - |
| 103 | + $this->dispatcher->dispatch(new BeforeMiddlewareEvent($middleware, $request)); |
108 | 104 | try {
|
109 | 105 | return $response = $middleware->process($request, $this->nextHandler());
|
110 | 106 | } finally {
|
111 |
| - $this->dispatcher->dispatch(new AfterMiddleware($middleware, $response ?? null)); |
| 107 | + $this->dispatcher->dispatch(new AfterMiddlewareEvent($middleware, $response ?? null)); |
112 | 108 | }
|
113 | 109 | }
|
114 | 110 |
|
115 |
| - return $this->fallback->handle($request); |
| 111 | + // TODO : eventuellement permettre de laisser le fallback à null et dans ce cas lever l'exception qui est présente dans la classe EmptyPipelineHandler directement à la fin de cette méthode. Ca évitera de conserver la classe EmptyPipelineHandler qui sera inutile !!!! |
| 112 | + $this->dispatcher->dispatch(new BeforeHandlerEvent($this->fallback, $request)); |
| 113 | + try { |
| 114 | + return $response = $this->fallback->handle($request);; |
| 115 | + } finally { |
| 116 | + $this->dispatcher->dispatch(new AfterHandlerEvent($this->fallback, $response ?? null)); |
| 117 | + } |
116 | 118 | }
|
117 | 119 |
|
118 |
| - /** |
119 |
| - * Store a "fresh" Request instance in the container. |
120 |
| - * Usefull if you need to retrieve some request attributes. |
121 |
| - * |
122 |
| - * Ex: in the CookieCollectionMiddleware with the CookieCollection::ATTRIBUTE |
123 |
| - * |
124 |
| - * @param ServerRequestInterface $request |
125 |
| - */ |
126 |
| - /* |
127 |
| - private function bindRequestInstance(ServerRequestInterface $request): void |
128 |
| - { |
129 |
| - $this->container->bind(ServerRequestInterface::class, $request); |
130 |
| - }*/ |
131 |
| - |
132 | 120 | /**
|
133 | 121 | * Get a handler pointing to the next middleware position.
|
134 | 122 | *
|
135 | 123 | * @return RequestHandlerInterface New Pipeline instance used as handler.
|
136 | 124 | */
|
| 125 | + // TODO : vérifier si le clone de cette classe ne posera pas de probléme lors du clone de la propriété $this->dispatcher qui est un objet !!! |
137 | 126 | private function nextHandler(): RequestHandlerInterface
|
138 | 127 | {
|
139 | 128 | $copy = clone $this;
|
|
0 commit comments