Middleware
The Middleware package runs route middleware around the final request handler.
Use it when you want route-level request gates such as authentication, ownership checks, validation, or redirects before the controller action runs.
This package is intentionally small. It provides:
Quantum\Middleware\Middleware, the base contract every middleware class extendsQuantum\Middleware\MiddlewareManager, the runtime pipeline that resolves and executes middleware classes for a matched routeQuantum\Middleware\Exceptions\MiddlewareExceptionfor missing middleware classes and invalid middleware type handling
When this package runs
MiddlewareManager is created from a matched route and then applies middleware in two stages:
- framework middleware
- module middleware
In the current implementation, the framework stage adds rate limiting when the route has a rate-limit definition. After that, the manager runs the route's module middleware list in order and finally calls the terminal handler.
When a route combines group middleware and route-specific middleware, the group entries wrap the route entries. That keeps shared gates such as Auth at the outside of the pipeline and leaves route-specific checks for the inner stage.
What middleware classes look like
Every middleware extends Quantum\Middleware\Middleware and implements:
use Closure;
use Quantum\Http\Request;
use Quantum\Http\Response;
use Quantum\Middleware\Middleware;
final class Auth extends Middleware
{
public function apply(Request $request, Closure $next): Response
{
if (!auth()->check()) {
return redirect('/signin');
}
return $next($request);
}
}
A middleware can:
- return its own response and stop the pipeline
- call
$next($request)and let the request continue
Important constraints
- Middleware names are resolved to module classes only. There is no alias registry or container-based middleware resolution in this package.
- The manager instantiates each middleware directly with
new $middlewareClass($request). - The resolved class extends
Quantum\Middleware\Middleware. - Missing classes raise
MiddlewareException; wrong base types raise the shared base exception for invalid inheritance. - Rate limiting, when present on the route, always runs before module middleware.