Expressive
PSR-15 Middleware in Minutes
Features

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

Dependency Injection
Make your code flexible and robust, using the dependency injection container of your choice.
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!
{: .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.
Support
- Issues: github.com/zendframework/Expressive/issues
- Source: github.com/zendframework/Expressive
- Chat: zendframework-slack.herokuapp.com
- Forum: discourse.zendframework.com
Found a mistake or want to contribute to the documentation? Edit this page on GitHub!