Telegraph Middleware
This package includes the following Telegraph-compatible middleware:, (*1)
-
ExceptionHandler to handle exceptions from subsequent middleware
-
FormContentHandler to deserialize the URL-encoded payload of a PSR-7 request
-
JsonContentHandler to deserialize the JSON payload of a PSR-7 request
-
ResponseSender to send a PSR-7 response
-
SessionHeadersHandler to manage session headers "manually", instead of PHP
managing them automatically
This package is installable and PSR-4 autoloadable via Composer as
telegraph/middleware., (*2)
ExceptionHandler
Similarly, the ExceptionHandler does what it sound like: it catches any
exceptions that bubble up through the subsequent middleware decorators., (*3)
The ExceptionHandler does nothing with the $request , and
passes it directly to $next inside a try/catch block. If no exception
bubbles up, it returns the $response from $next. However, if it catches an
exception, it returns an entirely new $response object with the exception
message and an HTTP 500 status code. It then returns the new $response object., (*4)
The ExceptionHandler is intended to go near the top of the Telegraph queue,
but after the ResponseSender, so that the ResponseSender can then send the
returned $response., (*5)
To add the ExceptionHandler to your queue, instantiate it directly with an
empty $response implementation object ..., (*6)
$queue[] = new \Telegraph\Middleware\ExceptionHandler(new ResponseImplementation());
... or use a $resolver of your choice to instantiate it from the $queue., (*7)
FormContentHandler
FormContentHandler works almost identically to _JsonContentHandler_ (below),
but parses payloads of requests that have application/x-www-form-urlencoded as
the Content-Type., (*8)
JsonContentHandler
Again, the JsonContentHandler does what it sounds like: it deserializes the
JSON payload of a PSR-7 request object and makes the parameters available in
subsequent middleware decorators., (*9)
The JsonContentHandler checks the incoming request for a method other than
GET and for an application/json or application/vnd.api+json Content-Type
header. If it finds both of these, it parses the JSON and makes it available as
the parsed body of the $request before passing it to
$next. If the method is GET or the Content-Type header defines a different
mime type, the JsonContentHandler ignores the $request and continues the
chain., (*10)
To add the JsonContentHandler to your queue, instantiate it directly..., (*11)
$queue[] = new \Telegraph\Middleware\JsonContentHandler();
... or use a $resolver of your choice to instantiate it from the $queue., (*12)
To access the decoded parameters in subsequent middleware, use the
getParsedBody() method of the $request, (*13)
$decodedJsonData = $request->getParsedBody();
ResponseSender
The ResponseSender does just what it sounds like: it sends the PSR-7 response
object., (*14)
The ResponseSender does nothing with the $request, passing
it immediately to $next. Afterwards, it takes the returned $response and
sends it using header() and echo, and returns the sent $response., (*15)
The ResponseSender is intended to go at the top of the Telegraph queue, so
that it is the middleware with the last opportunity to do something with the
returned response., (*16)
To add the ResponseSender to your Telegraph queue, instantiate it directly ..., (*17)
$queue[] = new \Telegraph\Middleware\ResponseSender();
... or use a $resolver of your choice to instantiate it from the $queue., (*18)
SessionHeadersHandler
Normally, PHP will send out headers for you automatically when you call
session_start(). However, this means the headers are not being sent as part of
the PSR-7 response object, and are thus outside your control. This handler puts
them back under your control by placing the relevant headers in the PSR-7
response; its behavior is almost identical to the native PHP automatic session
headers behavior., (*19)
NOTE: For this middleware to work, you must disable the PHP session
header management ini settings. For example:, (*20)
ini_set('session.use_trans_sid', false);
ini_set('session.use_cookies', false);
ini_set('session.use_only_cookies', true);
ini_set('session.cache_limiter', '');
If you do not, the handler will throw a RuntimeException., (*21)
To add the SessionHeadersHandler to your queue, instantiate it directly..., (*22)
$queue[] = new \Telegraph\Middleware\SessionHeadersHandler();
... or use a $resolver of your choice to instantiate it from the $queue., (*23)
When instantiating, you can pass a
cache limiter value as the first
constructor parameter. The allowed values are 'nocache', 'public',
'private_no_cache', or 'priviate'. If you want no cache limiter header at all,
pass an empty string ''. The default is 'nocache'., (*24)
You can also pass a cache expire value,
in minutes, as the second constructor parameter. The default is 180 minutes., (*25)