PSR-15 Middleware in Minutes



PSR-15 Middleware

Create middleware applications, using as many layers as you want, and the architecture your project needs.


PSR-7 HTTP Messages

Built to consume PSR-7!



Route requests to middleware using the routing library of your choice.

Dependency Injection

Dependency Injection

Make your code flexible and robust, using the dependency injection container of your choice.



Create templated responses, using a variety of template engines.

Error Handling

Error Handling

Handle errors gracefully, using templated error pages, whoops, or your own solution!

Get Started Now!

Installation is only a Composer command away!

$ composer create-project zendframework/zend-expressive-skeleton expressive

Expressive provides interfaces for routing and templating, letting you choose what to use, and how you want to implement it.

Our unique installer allows you to select your choices when starting your project!

Expressive Installer {: .center-block }

Learn More{: .btn .btn-lg .btn-primary}

Applications, Simplified

Write middleware:

$pathMiddleware = function (
    ServerRequestInterface $request,
    RequestHandlerInterface $handler
) {
    $uri  = $request->getUri();
    $path = $uri->getPath();

    return new TextResponse('You visited ' . $path, 200, ['X-Path' => $path]);

And add it to an application:

$app->get('/path', $pathMiddleware);

Learn More{: .btn .btn-lg .btn-primary}

Learn more

Or use the sidebar menu to navigate to the section you're interested in.


Found a mistake or want to contribute to the documentation? Edit this page on GitHub!