From 0f1a7cda1889a34c7ea950aee780bcb2a7c370f0 Mon Sep 17 00:00:00 2001
From: Sebastian Meyer
The MiddlewareQueue
+ manages the middlewares involved in processing a server request. It makes sure they are called in
+first-in, first-out (FIFO) order, i.e. the same order they were added to the queue. It also ensures all middlewares are
+implementing the PSR-15: HTTP Server Request Handlers specification for the
+Psr\Http\Server\MiddlewareInterface.
When instantiating a MiddlewareQueue
+ it defaults to being empty. But you can optionally pass an iterable set of
+middlewares to the constructor which are then put into the queue. To demonstrate, the following examples both have
+exactly the same result.
++ + +Examples:
++use OCC\PSR15\MiddlewareQueue; + +$middlewares = [ + new MiddlewareOne(), + new MiddlewareTwo() +]; + +$queue = new MiddlewareQueue($middlewares);
+use OCC\PSR15\MiddlewareQueue; + +$queue = new MiddlewareQueue(); + +$queue->enqueue(new MiddlewareOne()); +$queue->enqueue(new MiddlewareTwo());
The MiddlewareQueue
+ is based on a
+OCC\Basics\DataStructures\StrictQueue.
The MiddlewareQueue
+ provides a set of API methods, with MiddlewareQueue::enqueue()
+ and MiddlewareQueue::dequeue()
+
+being the most relevant ones. The former will add a new item at the end of the queue while the latter removes and
+returns the first item from the queue.
For a complete API documentation have a look at the +StrictQueue.
+ +Invoking MiddlewareQueue::enqueue()
+ will add a middleware at the end of the queue. The only argument must be a
+middleware object implementing the Psr\Http\Server\MiddlewareInterface
+. If the given argument does not meet the
+criterion an OCC\Basics\DataStructures\Exceptions\InvalidDataTypeException
+ is thrown.
Have a look at the AbstractMiddleware for an easy way to create your own middlewares!
+ +Calling MiddlewareQueue::dequeue()
+ will return the first middleware from the queue, i.e. the oldest one on the queue.
+Also, this middleware is removed from the queue.
If the queue is empty a RuntimeException
+ is thrown, so make sure to check the queue's length (e.g. with count()
+)
+before trying to dequeue an item!