File tree Expand file tree Collapse file tree 1 file changed +43
-0
lines changed Expand file tree Collapse file tree 1 file changed +43
-0
lines changed Original file line number Diff line number Diff line change 1+ <?php
2+
3+ namespace Bermuda \Http \Middleware ;
4+
5+ use \SplQueue ;
6+ use Psr \Http \Message \ResponseInterface ;
7+ use Psr \Http \Server \MiddlewareInterface ;
8+ use Psr \Http \Message \ServerRequestInterface ;
9+ use Psr \Http \Server \RequestHandlerInterface ;
10+
11+ /**
12+ * Handler class that processes the next middleware in the queue.
13+ *
14+ * This class manages the sequential processing of middleware using a queue,
15+ * eliminating the need for position tracking.
16+ *
17+ * @internal This class is for internal use only.
18+ */
19+ final class Next implements RequestHandlerInterface
20+ {
21+ private SplQueue $ queue ;
22+
23+ /**
24+ * @param \SplQueue<MiddlewareInterface> $queue Queue of middleware
25+ * @param RequestHandlerInterface $finalHandler Handler to use when queue is empty
26+ */
27+ public function __construct (
28+ SplQueue $ queue ,
29+ private readonly RequestHandlerInterface $ finalHandler
30+ ) {
31+ $ this ->queue = clone $ queue ;
32+ }
33+
34+ public function handle (ServerRequestInterface $ request ): ResponseInterface
35+ {
36+ if ($ this ->queue ->isEmpty ()) {
37+ return $ this ->finalHandler ->handle ($ request );
38+ }
39+
40+ $ middleware = $ this ->queue ->dequeue ();
41+ return $ middleware ->process ($ request , $ this );
42+ }
43+ }
You can’t perform that action at this time.
0 commit comments