zendframework/zend-stratigility
Zend Stratigility is a lightweight middleware pipeline for PHP, built around PSR-7 HTTP messages. Compose request/response processing with reusable middleware, route-like piping, and error handling—ideal for building microservices or adding middleware to existing apps.
#186 adds a safeguard to middleware pipes to prevent them from being called multiple times within the same middleware. As an example, consider the following middleware:
public function process(
ServerRequestInterface $request,
RequestHandlerInterface $handler
) : Response Interface {
$session = $request->getAttribute('session');
if (! $session) {
$response = $handler->handle($request);
}
// Inject another attribute before handling
$response = $handler->handle($request->withAttribute(
'sessionWasEnabled',
true
);
return $response;
}
When using Stratigility, the $handler is an instance of
Zend\Stratigility\Next, which encapsulates the middleware pipeline and
advances through it on each call to handle().
The example demonstrates a subtle error: the response from the first conditional should have been returned, but wasn't, which has led to invoking the handler a second time. This scenario can have unexpected behaviors, including always returning a "not found" response, or returning a response from a handler that was not supposed to execute (as an earlier middleware already returned early in the original call).
These bugs are hard to locate, as calling handle() is a normal part of any
middleware, and multiple conditional calls to it are a standard workflow.
With this new version, Next will pass a clone of itself to the next
middleware in the pipeline, and unset its own internal pipeline queue. Any
subsequent requests to handle() within the same scope will therefore result
in the exception Zend\Stratigility\Exception\MiddlewarePipeNextHandlerAlreadyCalledException.
If you depended on calling $handler->handle() multiple times in succession
within middleware, we recommend that you compose the specific pipeline(s)
and/or handler(s) you wish to call as class dependencies.
Zend\Stratigility\EmptyPipelineHandler, which raises an
EmptyPipelineException when it handles an incoming request. It's primary
purpose is for use in the MiddlewarePipe as a fallback handler during
handle() operations.#178 provides some performance improvements to MiddlewarePipe::handle() by
having it create an instance of EmptyPipelineHandler to use as a fallback
handler when it calls process() on itself. This prevents cloning of the
pipeline in this scenario, which is used when it acts as an application
entrypoint.
#185 removes the "final" declaration from the ErrorHandler class, to allow
more easily mocking it for testing.
Zend\Stratigility\Middleware\ErrorHandler that can
never be reached.#165 fixes an
issue with the PathMiddlewareDecorator whereby it was using the original
request when invoking the handler it creates, instead of prepending the
configured path prefix to the request URI created. With the fix, if middleware
alters the request path passed to the handler, the changes will now propagate
to later middleware. As an example:
new PathMiddlewareDecorator('/api', middleware(function ($request, $handler) {
$uri = $request->getUri();
if (! preg_match('#^/v\d+/#', $uri->getPath())) {
$request = $request->withUri($uri->withPath('/v1' . $uri->getPath()));
}
return $handler->handle($request);
}));
For the request path /api/books, the above will now correctly result in
/api/v1/books being propagated to lower layers of the application, instead
of /api/books.
#146 adds a new
interface, Zend\Stratigility\MiddlewarePipeInterface. It extends the PSR-15
MiddlewareInterface and RequestHandlerInterface, and defines one
additional method, pipe(MiddlewareInterface $middleware) : void.
#150 adds a new
class, Zend\Stratigility\Middleware\RequestHandlerMiddleware. The class
implements the PSR-15 RequestHandlerInterface and MiddlewareInterface, and
accepts a single constructor argument, a RequestHandlerInterface instance.
Each of its handle() and process() methods proxy to the composed request
handler's handle() method, returning its result.
This class can be useful for adapting request handlers to use within pipelines.
#142 adds a new
class, Zend\Stratigility\Middleware\HostMiddlewareDecorator, which provides
host segregation functionality for middleware, allowing conditional execution
of middleware only if the requested host matches a configured host.
// Only process $middleware if the request host matches 'example.com':
$pipeline->pipe(new HostMiddlewareDecorator('example.com', $middleware));
Additionally, the patch provides a utility function,
Zend\Stratigility\host(), to simplify the above declaration:
$pipeline->pipe(host('example.com', $middleware));
#128 adds a
marker interface, Zend\Stratigility\Exception\ExceptionInterface; all
package exceptions now implement this interface, allowing you to catch all
package-related exceptions by typehinting against it.
#145 updates the component to implement and consume ONLY PSR-15 interfaces; http-interop interfaces and callable middleware are no longer directly supported (though Stratigility provides decorators for the latter in order to cast them to PSR-15 implementations).
#134 and
#146 modify
MiddlewarePipe in two ways: it now implements the new
MiddlewarePipeInterface, and is marked as final, disallowing direct
extension. Either decorate an instance in a custom MiddlewarePipeInterface
implementation, or create a custom PSR-15 MiddlewareInterface
implementation if piping is not necessary or will allow additional types.
#155 modifies
each of the following classes to mark them final:
Zend\Stratigility\Middleware\CallableMiddlewareDecoratorZend\Stratigility\Middleware\DoublePassMiddlewareDecoratorZend\Stratigility\Middleware\HostMiddlewareDecoratorZend\Stratigility\Middleware\NotFoundHandlerZend\Stratigility\Middleware\OriginalMessagesZend\Stratigility\Middleware\PathMiddlewareDecoratorZend\Stratigility\Middleware\RequestHandlerMiddlewareZend\Stratigility\Next#134,
#145, and
#146 update
MiddlewarePipe to implement Psr\Http\Server\RequestHandlerInterface.
Calling it will cause it to pull the first middleware off the queue and create
a Next implementation that uses the remaining queue as the request handler;
it then processes the middleware.
#134 removes
the ability to specify a path when calling pipe(); use the
PathMiddlewareDecorator or path() utility function to pipe middleware with
path segregation.
#153 modifies
the first argument of the Zend\Expressive\Middleware\ErrorHandler and
NotFoundHandler classes. Previously, they each expected a
Psr\Http\Message\ResponseInterface instance; they now both expect a PHP
callable capable of producing such an instance. This change was done to
simplify re-use of a service for producing unique response instances within
dependency injection containers.
#157 marks the
package as conflicting with zendframework/zend-diactoros versions less than
1.7.1. This is due to the fact that that version provides a bugfix for its
Uri::getHost() implementation that ensures it follows the PSR-7 and IETF RFC
3986 specifications.
#163 removes
Zend\Stratigility\Middleware\PathRequestHandlerDecorator, as it was
deprecated in 2.2, and no longer used with the 3.0 code base.
#122 removes support for PHP versions 5.6, 7.0, as well as HHVM.
#122 removes the following classes:
Zend\Stratigility\Delegate\CallableDelegateDecoratorZend\Stratigility\Exception\InvalidRequestTypeExceptionZend\Stratigility\Exception\MissingResponsePrototypeExceptionZend\Stratigility\MiddlewareInterfaceZend\Stratigility\Middleware\CallableInteropMiddlewareWrapperZend\Stratigility\Middleware\CallableMiddlewareWrapperZend\Stratigility\Middleware\CallableMiddlewareWrapperFactoryZend\Stratigility\NoopFinalHandler#134 removes
the class Zend\Stratigility\Route. This was an internal message passed
between a MiddlewarePipe and Next instance, and its removal should not
affect end users.
#134 removes
Zend\Stratigility\Exception\InvalidMiddlewareException, as the exception is
no longer raised by MiddlewarePipe.
#140 adds the
class Zend\Stratigility\Middleware\CallableMiddlewareDecorator for the
purpose of decorating callable, standards-signature middleware for use with
a MiddlewarePipe instance. Instantiate it directly, passing the callable
middleware as the sole argument, or use the Zend\Stratigility\middleware()
utility function to generate the instance: middleware($callable).
#140 adds the
class Zend\Stratigility\Middleware\DoublePassMiddlewareDecorator for the
purpose of decorating callable, double-pass middleware for use with
a MiddlewarePipe instance. Instantiate it directly, passing the callable
middleware and a response instance as arguments, or use the
Zend\Stratigility\doublePassMiddleware() utility function to generate the
instance: doublePassMiddleware($callable, $response).
#140 adds the
class Zend\Stratigility\Middleware\PathMiddlewareDecorator for the purposes
of creating path-segregated middleware. The constructor expects a string path
literal as the first argument, and an
Interop\Http\Server\MiddlewareInterface instance for the second argument.
Alternately, use the Zend\Stratigility\path() utility function to generate
the instance: path('/foo', $middleware).
This decorator class replaces usage of the $path argument to
MiddlewarePipe::pipe(), and should be used to ensure your application is
forwards-compatible with the upcoming version 3 release.
#140 deprecates
the class Zend\Stratigility\Route. This class is an internal detail, and will
be removed in version 3.0.0.
#140 deprecates
the class Zend\Stratigility\Exception\InvalidMiddlewareException. This class
will be removed in version 3.0.0 as it will no longer be necessary due to
typehint usage.
#140 deprecates
the class Zend\Stratigility\Exception\InvalidRequestTypeException as it is
no longer used by the package. It will be removed in version 3.0.0.
#140 deprecates
the class Zend\Stratigility\Middleware\CallableInteropMiddlewareWrapper as it is
based on interfaces that will no longer be used starting in version 3.0.0. It
will be removed in version 3.0.0. Please use the new class
Zend\Stratigility\Middleware\CallableMiddlewareDecorator, or the utility
function middleware(), to decorate callable standards-signature middleware.
#140 deprecates
the class Zend\Stratigility\Middleware\CallableMiddlewareWrapper as it is
based on interfaces that will no longer be used starting in version 3.0.0. It
will be removed in version 3.0.0. Please use the new class
Zend\Stratigility\Middleware\DoublePassMiddlewareDecorator, or the utility
function doublePassMiddleware(), to decorate callable double pass middleware.
#140 deprecates
the class Zend\Stratigility\Middleware\CallableMiddlewareWrapperFactory as
the class it is associated will be removed starting in version 3.0.0. The
class will be removed in version 3.0.0.
#140 deprecates
the class Zend\Stratigility\NoopFinalHandler as the class will be removed
starting in version 3.0.0.
#140 deprecates
the two-argument form of Zend\Stratigility\MiddlewarePipe::pipe(). If you
need to perform path segregation, use the
Zend\Stratigility\Middleware\PathMiddlewareDecorator class and/or the
Zend\Stratigility\path() function to decorate your middleware in order to
provide path segregation.
#140 deprecates
the piping of double pass middleware directly to pipe(); decorate your
double-pass middleware using Zend\Stratigility\Middleware\DoublePassMiddleware
or Zend\Stratigility\doublePassMiddleware() prior to piping.
#159 deprecates
Zend\Stratigility\MiddlewarePipe::setCallableMiddlewareDecorator(). Use
Zend\Stratigility\doublePassMiddleware() or Zend\Stratigility\Middleware\DoublePassMiddleware
prior to passing your double-pass middleware to MiddlewarePipe::pipe().
#159 deprecates
Zend\Stratigility\MiddlewarePipe::setResponsePrototype(). This was used only
to seed an instance of Zend\Stratigility\Middleware\CallableMiddlewareWrapperFactory
previously; pass your response prototype directly to a new instance of
Zend\Stratigility\Middleware\DoublePassMiddleware or the ``Zend\Stratigility\doublePassMiddleware()`
function instead.
#159 deprecates
Zend\Stratigility\MiddlewarePipe::hasResponsePrototype().
^0.1.3. This was done to ensure
backwards compatibilty by injecting the project composer.json with the
currently installed version of http-interop/http-middleware, and in cases
where that package is not yet installed, prompting the user to install it.
This approach provides a tiered migration path to http-middleware 0.5.0 for
users.MiddlewarePipe detects if the second parameter of callable middleware is
a delegate/request handler when choosing whether or not to decorate it to
ensure that it will properly decorate it when used with
http-interop/http-middleware 0.5.0#112 adds support for http-interop/http-middleware 0.5.0 via a polyfill provided by the package webimpress/http-middleware-compatibility. Essentially, this means you can drop this package into an application targeting either the 0.4.1 or 0.5.0 versions of http-middleware, and it will "just work".
Adds support for PHP 7.2.
Removes support for HHVM.
#107 removes
the unused $raiseThrowables property from Zend\Stratigility\Next.
Middleware::pipe() handles MiddlewarePipe instances passed to it;
previously it was incorrectly wrapping them in CallableMiddlewareWrapper
instances; it now pipes them as-is.#96 changes the minimum supported http-interop/http-middleware version to 0.4.1. This impacts several things:
Middleware that implemented the http-interop/http-middleware 0.2.0 interfaces will no longer work with Stratigility. In most cases, these can be updated by changing import statements. As an example:
// http-middleware 0.2.0:
use Interop\Http\Middleware\DelegateInterface;
use Interop\Http\Middleware\ServerMiddlewareInterface;
// Becomes the following under 0.4.1:
use Interop\Http\ServerMiddleware\DelegateInterface;
use Interop\Http\ServerMiddleware\MiddlewareInterface as ServerMiddlewareInterface;
The various classes under Zend\Stratigility\Middleware now implement the
new interfaces, which could affect extending classes.
Zend\Stratigility\Next and Zend\Stratigility\Delegate\CallableDelegateDecorator
have signature changes due to changes in the DelegateInterface; again,
these changes should only affect those extending the classes.
Interop\Http\Middleware\MiddlewareInterface (which was intended for
implementation by client-side middleware) no longer exists, which means
it is also no longer supported within Stratigility.
#67 updates each
of Zend\Stratigility\MiddlewarePipe, Zend\Stratigility\Middleware\ErrorHandler,
and Zend\Stratigility\Middleware\NotFoundHandler to require all arguments
(none are optional).
#67 modifies
the internals of Zend\Stratigility\MiddlewarePipe's __invoke() method.
Next instance, it now captures it in a variable
named $layer.Next is not a response instance, the response passed
during invocation is promoted as the layer response.$next argument provided at invocation,
and the result of that returned without verification.In most cases, this should have no impact on your application.
#71 modifies
Zend\Stratigility\MiddlewarePipe such that it no longer decorates the
request and response provided at invocation with the
Zend\Stratigility\Http\* variants, as these have been removed.
#76 updates
MiddlewarePipe to implement only the http-interop/http-middleware
server-side middleware interface, and not the Stratigility-specific
MiddlewareInterface (which was removed).
#76 updates
Zend\Stratigility\Middleware\ErrorHandler to implement the
http-interop/http-middleware server-side middleware interface instead of the
Stratigility-specific MiddlewareInterface (which was removed).
#76 updates
Zend\Stratigility\Middleware\NotFoundHandler to implement the
http-interop/http-middleware server-side middleware interface instead of the
Stratigility-specific MiddlewareInterface (which was removed).
#76 updates
MiddlewarePipe::__invoke() to require a third argument, now named
$delegate, and no longer type-hinted. If a callable not implementing
http-interop/http-middleware DelegateInterface is provided, it is wrapped in
the CallableDelegateDecorator (introduced in 1.3.0). The method then calls
its own process() method with the request and delegate. This method should
typically only be used as an entry point for an application.
#76 updates
MiddlewarePipe::pipe() to raise an exception if callable middleware using
the legacy double-pass signature is provided, but no response prototype is
composed in the MiddlewarePipe instance yet.
#76 updates
the constructor of Next to rename the $done argument to $nextDelegate
and typehint it against the http-interop/http-middleware DelegateInterface.
#76 updates
Next::__invoke() to remove all arguments except the $request argument; the
method now proxies to the instance process() method.
#76 updates
Next to no longer compose a Dispatch instance; it is now capable of
dispatching on its own.
#76 updates the
Zend\Stratigility\Route constructor to raise an exception if
non-http-interop middleware is provided as the route handler.
#79 updates the
raiseThrowables() method of each of MiddlewarePipe and Next to be
no-ops.
raiseThrowables() method of each of MiddlewarePipe and Next.Zend\Stratigility\Exception\MiddlewareException was removed as it is no
longer thrown.
#67 removes
Zend\Stratigility\FinalHandler. Use Zend\Stratigility\NoopFinalHandler
instead, along with Zend\Stratigility\Middleware\ErrorHandler and
Zend\Stratigility\Middleware\NotFoundHandler (or equivalents).
#67 removes
Zend\Stratigility\ErrorMiddlewareInterface. Register middleware, such as
Zend\Stratigility\Middleware\ErrorHandler, in outer layers of your
application to handle errors.
#67 removes
Zend\Stratigility\Dispatch. This was an internal detail of the Next
implementation, and should not affect most applications.
#67 removes
Zend\Stratigility\Utils::getArity(). This was used only in Dispatch;
since middleware signatures no longer vary, it is no longer necessary.
#67 removes
the final, optional $err argument to Zend\Stratigility\Next(); raise
exceptions instead, and provide error handling middleware such as
Zend\Stratigility\Middleware\ErrorHandler instead.
#67 removes
the $done argument to the Zend\Stratigility\Next constructor.
#71 removes
the Zend\Stratigility\Http\Request class.
#71 removes
the Zend\Stratigility\Http\Response class.
#71 removes
Zend\Stratigility\Http\ResponseInterface.
#76 removes
Zend\Stratigility\MiddlewareInterface and Zend\Stratigility\ErrorMiddlewareInterface.
The latter is removed entirely, while the former is essentially replaced by
http-interop's ServerMiddlewareInterface. You may still write callable
middleware using the legacy double-pass signature, however.
#76 removes the
Zend\Stratigility\Dispatch class. The class was an internal detail of
Next, and no longer required.
$err is dealt with. Specifically, if an error arises,
then subsequent middlewares should be dispatched as callables. Without this
fix, stratigility would simply continue dispatching middlewares, ignoring
the failing ones.$done or $nextDelegate is invoked by Next when an
error is present. Previously, the class was detecting a Next instance as an
http-interop DelegateInterface instance and dropping the error; this would
then mean if the instance contained error middleware, it would never be
dispatched.#66 adds a new
class, Zend\Stratigility\Middleware\NotFoundHandler. This class may be piped
into an application at an innermost layer; when invoked, it will return a 404
plain text response.
#66 adds a new
class, Zend\Stratigility\Middleware\ErrorHandler. This class may be piped
into an application, typically at the outermost or one of the outermost
layers. When invoked, it does the following:
ErrorExceptions.MissingResponseException.A default error response generator is provided, which will return a 5XX series response in plain text. You may provide a callable generator to the constructor in order to customize the response generated; please refer to the documentation for details.
#66 adds a new
class, Zend\Stratigility\NoopFinalHandler. This class may be provided as the
$out argument to a MiddlewarePipe, or as the final handler to
Zend\Diactoros\Server::listen() (in which case it will be passed to the
middleware you invoke as the application). This handler returns the response
provided to it verbatim.
#70 adds a new
class, Zend\Stratigility\Middleware\OriginalMessages. Compose this
middleware in an outermost layer, and it will inject the following attributes
in the request passed to nested layers:
originalRequest, representing the request provided to it.originalResponse, representing the response provided to it.originalUri, representing URI instance composed in the request provided to it.#75 adds support for http-interop middleware 0.2.0. For full details, see the migration guide. As a summary of features:
MiddlewarePipe instances.MiddlewarePipe instances; these will be
decorated in a Zend\Stratigility\Middleware\CallableInteropMiddlewareWrapper
instance.MiddlewarePipe now implements the http-interop
ServerMiddlewareInterface, allowing it to be used in http-interop
middleware dispatchers.#75 adds the
class Zend\Stratigility\Middleware\CallableMiddlewareWrapper. It accepts
callable double-pass middleware and a response prototype, and implements the
http-interop ServerMiddlewareInterface, allowing you to adapt existing
callable middleware to work with http-interop middleware dispatchers.
#75 adds the
class Zend\Stratigility\Middleware\CallableInteropMiddlewareWrapper. It accepts
callable middleware that follows the http-interop ServerMiddlewareInterface,
and implements that interface itself, to allow composing such middleware in
http-interop middleware dispatchers.
#75 adds the
class Zend\Stratigility\Delegate\CallableDelegateDecorator, which can be
used to add http-interop middleware support to your existing callable
middleware.
#75 adds a new
method to MiddlewarePipe, setResponseProtoype(). When this method is
invoked with a PSR-7 response, the following occurs:
Next and Dispatch instances, to allow
dispatching legacy callable middleware as if it were http-interop
middleware.CallableMiddlewareWrapper in order to adapt it
as http-interop middleware.#78 adds a new
method to each of Zend\Stratigility\MiddlewarePipe, Next, and Dispatch:
raiseThrowables(). When called, Dispatch will no longer wrap dispatch of
middleware in a try/catch block, allowing throwables/exceptions to bubble out.
This enables the ability to create error handling middleware as an outer layer
or your application instead of relying on error middleware and/or the final
handler. Typical usage will be to call the method on the MiddlewarePipe
before dispatching it.
#70 makes the
following changes to Zend\Stratigility\FinalHandler:
originalRequest attribute,
instead of getOriginalRequest(); see the deprecation of
Zend\Stratigility\Http\Request, below, for why this works.Zend\Stratigility\Http\Response-specific write() method, but rather
pulls the message body and writes to that.#75 updates
MiddlewarePipe to inject the $response argument to __invoke() as the
response prototype.
#75 updates
Zend\Stratigility\Next to implement the http-interop middleware
DelegateInterface. It also updates Zend\Stratigility\Dispatch to add a new
method, process(), following the DelegateInterface signature, thus
allowing Next to properly process http-interop middleware. These methods
will use the composed response prototype, if present, to invoke callable
middleware using the legacy signature.
#75 updates
Next to allow the $done constructor argument to be an http-interop
DelegateInterface, and will invoke it as such if the queue is exhausted.
#75 updates
Route (which is used internally by MiddlewarePipe to allow either callable
or http-interop middleware as route handlers.
#66 deprecates
the Zend\Stratigility\FinalHandler class. We now recommend using the
NoopFinalHandler, along with the ErrorHandler and NotFoundHandler
middleware (or equivalents) to provide a more fine-grained, flexible, error
handling solution for your applications.
#66 deprecates
the Zend\Stratigility\Dispatch class. This class is used internally by
Next, and deprecation should not affect the majority of users.
#66 deprecates
Zend\Stratigility\ErrorMiddlewareInterface. We recommend instead using
exceptions, along with the ErrorHandler, to provide error handling for your
application.
#66 updates
Zend\Stratigility\MiddlewarePipe::__invoke() to emit a deprecation notice if
no $out argument is provided, as version 2 will require it.
#66 updates
Zend\Stratigility\Next::__invoke() to emit a deprecation notice if
a non-null $err argument is provided; middleware should raise an exception,
instead of invoking middleware implementing ErrorMiddlewareInterface.
#70 deprecates
Zend\Stratigility\Http\Request. Additionally:
originalRequest, allowing retrieval using standard PSR-7 attribute access.getCurrentRequest() and getOriginalRequest() now emit
deprecation notices when invoked, urging users to update their code.#70 deprecates
Zend\Stratigility\Http\ResponseInterface.
#70 deprecates
Zend\Stratigility\Http\Response. Additionally, the methods write(),
end(), isComplete(), and getOriginalResponse() now emit deprecation
notices when invoked, urging users to update their code.
#75 deprecates
the $response argument in existing callable middleware. Please only operate
on the response returned by $next/$delegate, or create a response. See the
documentation section on response arguments
for more details.
#75 deprecates
usage of error middleware, and thus deprecates the $err argument to $next;
explicitly invoking error middleware using that argument to $next will now
raise a deprecation notice.
FinalHandler with regards to exception handling, ensuring
that the reason phrase reported corresponds to the HTTP status code used.FinalHandler when creating an error or 404 response to call
write() instead of end() on the response object. This fixes a lingering
issue with emitting the Content-Length header from the SapiEmitter, as
well as prevents the SapiEmitter from raising exceptions when doing so
(which was happening starting with 1.2.0).This release contains two potential backwards compatibility breaks:
In versions prior to 1.2.0, after Zend\Stratigility\Http\Response::end() was
called, with*() operations were performed as no-ops, which led to
hard-to-detect errors. Starting with 1.2.0, they now raise a
RuntimeException.
In versions prior to 1.2.0, Zend\Stratigility\FinalHandler always provided
exception details in the response payload for errors. Starting with 1.2.0, it
only does so if not in a production environment (which is the default
environment).
InvalidMiddlewareException, with the static factory fromValue() that
provides an exception message detailing the invalid type. MiddlewarePipe now
throws this exception from the pipe() method when a non-callable value is
provided.FinalHandler::setOriginalResponse(), allowing you to alter the response used
for comparisons when the FinalHandler is invoked.Zend\Stratigility\Dispatch to catch PHP 7 Throwables.Zend\Stratigility\Dispatch to use the
corresponding PSR-7 interfaces, instead of the Stratigility-specific
decorators. This fixes issues when calling $next() with non-Stratigility
instances of either.Next to clone the incoming SplQueue instance, ensuring the
original can be re-used for subsequent invocations (e.g., within an async
listener environment such as React).Utils::getStatusCode($error, ResponseInterface $response); this static
method will attempt to use an exception code as an HTTP status code, if it
falls in a valid HTTP error status range. If the error is not an exception, it
ensures that the status code is an error status.FinalHandler such that it will return the response provided at invocation
if it differs from the response at initialization (i.e., a new response
instance, or if the body size has changed). This allows you to safely call
$next() from all middleware in order to allow post-processing.phpcs.xml PHPCS configuration file, allowing execution of each of phpcs
and phpcbf without arguments.[$instance, $method],
['ClassName', 'method']) work, as well as on static methods using the string
syntax ('ClassName::method'). This allows them to be used without issue as
middleware handlers.First stable release, and first relase as zend-stratigility.
How can I help you explore Laravel packages today?