Skip to content

Commit e56a1e8

Browse files
authored
Add middleware caching (#35)
1 parent 986a4e9 commit e56a1e8

File tree

1 file changed

+14
-10
lines changed

1 file changed

+14
-10
lines changed

src/MiddlewareStack.php

+14-10
Original file line numberDiff line numberDiff line change
@@ -69,33 +69,37 @@ private function build(): void
6969
/**
7070
* Wrap handler by middlewares.
7171
*/
72-
private function wrap(Closure $middleware, RequestHandlerInterface $handler): RequestHandlerInterface
72+
private function wrap(Closure $middlewareFactory, RequestHandlerInterface $handler): RequestHandlerInterface
7373
{
74-
return new class($middleware, $handler, $this->eventDispatcher) implements RequestHandlerInterface {
75-
private Closure $middleware;
74+
return new class($middlewareFactory, $handler, $this->eventDispatcher) implements RequestHandlerInterface {
75+
private Closure $middlewareFactory;
76+
private ?MiddlewareInterface $middleware = null;
7677
private RequestHandlerInterface $handler;
7778
private EventDispatcherInterface $eventDispatcher;
7879

7980
public function __construct(
80-
Closure $middleware,
81+
Closure $middlewareFactory,
8182
RequestHandlerInterface $handler,
8283
EventDispatcherInterface $eventDispatcher
8384
) {
84-
$this->middleware = $middleware;
85+
$this->middlewareFactory = $middlewareFactory;
8586
$this->handler = $handler;
8687
$this->eventDispatcher = $eventDispatcher;
8788
}
8889

8990
public function handle(ServerRequestInterface $request): ResponseInterface
9091
{
91-
/** @var MiddlewareInterface $middleware */
92-
$middleware = ($this->middleware)();
93-
$this->eventDispatcher->dispatch(new BeforeMiddleware($middleware, $request));
92+
if ($this->middleware === null) {
93+
/** @var MiddlewareInterface */
94+
$this->middleware = ($this->middlewareFactory)();
95+
}
96+
97+
$this->eventDispatcher->dispatch(new BeforeMiddleware($this->middleware, $request));
9498

9599
try {
96-
return $response = $middleware->process($request, $this->handler);
100+
return $response = $this->middleware->process($request, $this->handler);
97101
} finally {
98-
$this->eventDispatcher->dispatch(new AfterMiddleware($middleware, $response ?? null));
102+
$this->eventDispatcher->dispatch(new AfterMiddleware($this->middleware, $response ?? null));
99103
}
100104
}
101105
};

0 commit comments

Comments
 (0)