Download the PHP package mindplay/middleman without Composer
On this page you can find all versions of the php package mindplay/middleman. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download mindplay/middleman
More information about mindplay/middleman
Files in mindplay/middleman
Package middleman
Short Description PSR-7 middleware dispatcher. Let's stop trying to make this complicated.
License LGPL-3.0+
Informations about the package middleman
mindplay/middleman
Dead simple PSR-15 / PSR-7 middleware dispatcher.
Provides (optional) integration with a variety of dependency injection containers compatible with PSR-11.
To upgrade between major releases, please see UPGRADING.md.
A growing catalog of PSR-15 middleware-components is available from github.com/middlewares.
Usage
The constructor expects an array of PSR-15 MiddlewareInterface
instances:
The Dispatcher
implements the PSR-15 RequestHandlerInterface
. This package only provides the
middleware stack - to run a PSR-15 handler, for example in your index.php
file, you need
a PSR-15 host or a similar facility.
Note that the middleware-stack in the Dispatcher
is immutable - if you need a stack you can manipulate, array
, ArrayObject
, SplStack
etc. are all fine choices.
Anonymous Functions as Middleware
You can implement simple middleware "in place" by using anonymous functions in a middleware-stack, using a PSR-7/17 implementation such as nyholm/psr7
:
Dependency Injection via the Resolver Function
If you want to integrate with an IOC container
you can use the ContainerResolver
- a "resolver" is a callable which gets applied to every element in your middleware stack,
with a signature like:
function (string $name) : MiddlewareInterface
The following example obtains middleware components on-the-fly from a DI container:
If you want the Dispatcher
to integrate deeply with your framework of choice, you can implement this as a class
implementing the magic __invoke()
function (as ContainerResolver
does) - or "in place", as an anonymous function
with a matching signature.
If you want to understand precisely how this component works, the whole thing is just one class with a few lines of code - if you're going to base your next project on middleware, you can (and should) understand the whole mechanism.
Middleware?
Middleware is a powerful, yet simple control facility.
If you're new to the concept of middleware, the following section will provide a basic overview.
In a nutshell, a middleware component is a function (or MiddlewareInterface instance)
that takes an incoming (PSR-7) RequestInterface
object, and returns a ResponseInterface
object.
It does this in one of three ways: by assuming, delegating, or sharing responsibility for the creation of a response object.
1. Assuming Responsibility
A middleware component assumes responsibility by creating and returning a response object, rather than delegating to the next middleware on the stack:
Middleware near the top of the stack has the power to completely bypass middleware further down the stack.
2. Delegating Responsibility
By calling $next
, middleware near the top of the stack may choose to fully delegate the
responsibility for the creation of a response to other middleware components
further down the stack:
Note that exhausting the middleware stack will result in an exception - it's assumed that the last middleware component on the stack always produces a response of some sort, typically a "404 not found" error page.
3. Sharing Responsibility
Middleware near the top of the stack may choose to delegate responsibility for the creation of the response to middleware further down the stack, and then make additional changes to the returned response before returning it:
The middleware component at the top of the stack ultimately has the most control, as it may override any properties of the response object before returning.
All versions of middleman with dependencies
psr/http-message Version ^1.0 || ^2.0
psr/http-server-handler Version ^1.0
psr/http-server-middleware Version ^1.0
psr/container Version ^1.0 || ^2.0
mindplay/readable Version ^1