Middlewares

Middlewares are classes that are run before the controller is executed. They are defined by extending the Middleware\Base class.

class MyMiddleware extends Middleware\Base
{
    public function handle(Psr\Http\Message\ServerRequestInterface $request): ServerRequestInterface
    {
        // do stuff with `$request`

        return $request;
    }
}

To use a middleware with a controller, you need to add the GustavPHP\Gustav\Attribute\Middleware attribute to the controllers class.

#[GustavPHP\Gustav\Attribute\Middleware(new MyMiddleware())]
class CatsController extends Controller\Base
//...

You can add information to the request by adding attributes to the request.

public function handle(Psr\Http\Message\ServerRequestInterface $request): ServerRequestInterface
{
    $request = $request->withAttribute('from-middleware', 'Hello World!');

    return $request;
}

And then get them from the Request in Controllers.

class DogsController extends Controller\Base
{
    #[Route('/from-middleware')]
    public function police(#[Request] Psr\Http\Message\ServerRequestInterface $request)
    {
        $info = $request->getAttribute('from-middleware');

        return $this->plaintext($info);
    }
}