PHPackages                             woody/http-server-middleware - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [HTTP &amp; Networking](/categories/http)
4. /
5. woody/http-server-middleware

ActiveLibrary[HTTP &amp; Networking](/categories/http)

woody/http-server-middleware
============================

034PHP

Since Jan 30Pushed 7y ago1 watchersCompare

[ Source](https://github.com/woody-labs/http-server-middleware)[ Packagist](https://packagist.org/packages/woody/http-server-middleware)[ RSS](/packages/woody-http-server-middleware/feed)WikiDiscussions master Synced today

READMEChangelogDependenciesVersions (1)Used By (0)

Http Server Middleware
======================

[](#http-server-middleware)

Implements [PSR-15](https://www.php-fig.org/psr/psr-15/) PHP Standard.

Presentation
------------

[](#presentation)

A middleware component is an individual component participating, often together with other middleware components, in the processing of an incoming request and the creation of a resulting response, as defined by [PSR-7](https://www.php-fig.org/psr/psr-7/).

[![Middleware schema](https://github.com/woody-labs/http-server-middleware/raw/master/doc/middleware.jpg)](https://github.com/woody-labs/http-server-middleware/raw/master/doc/middleware.jpg)

Middleware are called, one by one, to handle the server request. The first one to create a response will return it to previous middleware. You can transmit object between middleware using attribute attached to the request.

Implementation
--------------

[](#implementation)

### Middleware

[](#middleware)

```
namespace App;

use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\RequestHandlerInterface;
use Woody\Http\Message\Response;
use Woody\Http\Server\Middleware\MiddlewareInterface;

class MyAppMiddleware implements MiddlewareInterface {

    public function isEnabled(bool $debug): bool
    {
        return true;
    }

    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
    {
        if ($request->getUri()->getPath() == '/test') {
            $data = 'Text 1';
        } else {
            $data = 'Text 2';
        }

        return new Response(200, ['Content-Type' => 'application/json'], json_encode($data));
    }
}
```

### Middleware declaration

[](#middleware-declaration)

Note: this sample requires `http-interop/response-sender`, available [here](https://packagist.org/packages/http-interop/response-sender).

```
include 'vendor/autoload.php';

use Woody\Http\Server\Middleware\Dispatcher;
use Woody\Http\Message\ServerRequest;

$request = ServerRequest::fromGlobals();

$dispatcher = new Dispatcher();
$dispatcher->pipe(new LogMiddleware());
$dispatcher->pipe(new ExceptionMiddleware());
$dispatcher->pipe(new SecurityMiddleware());
$dispatcher->pipe(new MyAppMiddleware());

$response = $dispatcher->handle($request);

Http\Response\send($response);
```

### Callback declaration

[](#callback-declaration)

The `dispatcher` can also accept callback functions.

```
include 'vendor/autoload.php';

use Woody\Http\Message\Response;
use Woody\Http\Server\Middleware\Dispatcher;
use Woody\Http\Message\ServerRequest;

$request = ServerRequest::fromGlobals();

$dispatcher = new Dispatcher();
$dispatcher->pipe(new LogMiddleware());
$dispatcher->pipe(function(ServerRequest $request, Dispatcher $dispatcher) {
    return new Response(200, ['Content-Type' => 'application/json'], json_encode(['user_id' => 42]));
});

$response = $dispatcher->handle($request);

Http\Response\send($response);
```

Documentation
-------------

[](#documentation)

[Article on Middleware implementation on PHP](https://www.grafikart.fr/tutoriels/middleware-psr15-904)

[French video](https://www.youtube.com/watch?v=w1FviidvxJc)

###  Health Score

20

—

LowBetter than 13% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity7

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity39

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://www.gravatar.com/avatar/e8229439a3d4f53cefbdae10395a2d6f2dea8906c239e87ce840bd459d1ba187?d=identicon)[smalot](/maintainers/smalot)

---

Top Contributors

[![smalot](https://avatars.githubusercontent.com/u/1424035?v=4)](https://github.com/smalot "smalot (1 commits)")

### Embed Badge

![Health badge](/badges/woody-http-server-middleware/health.svg)

```
[![Health](https://phpackages.com/badges/woody-http-server-middleware/health.svg)](https://phpackages.com/packages/woody-http-server-middleware)
```

###  Alternatives

[php-http/cache-plugin

PSR-6 Cache plugin for HTTPlug

25025.5M80](/packages/php-http-cache-plugin)[illuminate/http

The Illuminate Http package.

11937.2M6.6k](/packages/illuminate-http)[rdkafka/rdkafka

A PHP extension for Kafka

2.2k20.0k1](/packages/rdkafka-rdkafka)[httpsoft/http-message

Strict and fast implementation of PSR-7 and PSR-17

87930.4k113](/packages/httpsoft-http-message)[mezzio/mezzio-router

Router subcomponent for Mezzio

265.3M84](/packages/mezzio-mezzio-router)[serpapi/google-search-results-php

Get Google, Bing, Baidu, Ebay, Yahoo, Yandex, Home depot, Naver, Apple, Duckduckgo, Youtube search results via SerpApi.com

69122.6k](/packages/serpapi-google-search-results-php)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
