PHPackages                             danielspk/tornadohttp - 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. danielspk/tornadohttp

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

danielspk/tornadohttp
=====================

Middleware Container PSR-15

4.0.1(4y ago)1410[1 PRs](https://github.com/danielspk/TornadoHttp/pulls)1MITPHPPHP &gt;=8.0.0

Since Jul 4Pushed 3y ago1 watchersCompare

[ Source](https://github.com/danielspk/TornadoHttp)[ Packagist](https://packagist.org/packages/danielspk/tornadohttp)[ Docs](https://github.com/danielspk/TornadoHttp/)[ RSS](/packages/danielspk-tornadohttp/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependencies (7)Versions (37)Used By (1)

TORNADO HTTP
============

[](#tornado-http)

[![Build Status](https://camo.githubusercontent.com/d8e8244c448d9fac90c3ac722ef6926f18aca9c66bb9830ab4e557243dd61a0b/68747470733a2f2f7472617669732d63692e636f6d2f64616e69656c73706b2f546f726e61646f487474702e737667)](https://travis-ci.com/danielspk/TornadoHttp)[![Coverage Status](https://camo.githubusercontent.com/e4b279ef0c0a057b8536bf6b077528be6cc8e058c0508f080eaa360e1c504d13/68747470733a2f2f636f766572616c6c732e696f2f7265706f732f6769746875622f64616e69656c73706b2f546f726e61646f487474702f62616467652e7376673f6272616e63683d6d6173746572)](https://coveralls.io/github/danielspk/TornadoHttp?branch=master)[![Latest Stable Version](https://camo.githubusercontent.com/5506758a57138f84f9039bcec72af7299afc8c6243be955acf70d9fe0e1a43a8/68747470733a2f2f706f7365722e707567782e6f72672f64616e69656c73706b2f546f726e61646f487474702f762f737461626c652e737667)](https://packagist.org/packages/danielspk/TornadoHttp)[![Total Downloads](https://camo.githubusercontent.com/f371c7a5b421d403211ec538f4ba94df36be873274734b565dd12da918c42656/68747470733a2f2f706f7365722e707567782e6f72672f64616e69656c73706b2f546f726e61646f487474702f646f776e6c6f6164732e737667)](https://packagist.org/packages/danielspk/TornadoHttp)[![License](https://camo.githubusercontent.com/188814d6007326484e616017fbec7c654731be66dcfef06bc598cdd5f8a5103c/68747470733a2f2f706f7365722e707567782e6f72672f64616e69656c73706b2f546f726e61646f487474702f6c6963656e73652e737667)](https://packagist.org/packages/danielspk/TornadoHttp)[![SensioLabsInsight](https://camo.githubusercontent.com/6107253207a018d7e03edd34ece9f7f20daeba0647d53e9ae877768896a4d45f/68747470733a2f2f696e73696768742e73796d666f6e792e636f6d2f70726f6a656374732f33643134313937622d343036662d346132642d616361652d3833373231303438373061302f6d696e692e737667)](https://insight.symfony.com/projects/3d14197b-406f-4a2d-acae-8372104870a0)

[![ScreenShot](https://camo.githubusercontent.com/e202d4107749f231cfd74fd09a86b74ab4024c261cfe89e49141878735b82656/687474703a2f2f64616e69656c2d737069726964696f6e652e636f6d2e61722f696d616765732f70726f796563746f732f746f726e61646f2d7068702e706e67)](https://camo.githubusercontent.com/e202d4107749f231cfd74fd09a86b74ab4024c261cfe89e49141878735b82656/687474703a2f2f64616e69656c2d737069726964696f6e652e636f6d2e61722f696d616765732f70726f796563746f732f746f726e61646f2d7068702e706e67)

TORNADO HTTP es un handler de middlewares [PSR-15](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-15-request-handlers.md)

Documentación:
--------------

[](#documentación)

La siguiente documentación le enseñará el uso de Tornado Http.

### Instalación:

[](#instalación)

Se recomienda instalar esta librería mediante el uso de Composer de la siguiente forma:

```
    php composer.phar require danielspk/tornadohttp:~4.0

```

Esto instalará Tornado HTTP y creará o actualizará el archivo `composer.json` con la siguiente dependencia:

```
{
    "require": {
        "danielspk/tornadohttp": "~4.0"
    }
}

```

### Crear el contenedor de aplicación:

[](#crear-el-contenedor-de-aplicación)

Tornado Http puede construirse de varias formas:

#### Sin parámetros:

[](#sin-parámetros)

```
    $app = new \DMS\TornadoHttp\TornadoHttp();
```

#### Con una cola de Middlewares

[](#con-una-cola-de-middlewares)

```
    $app = new \DMS\TornadoHttp\TornadoHttp(
        [
            ['middleware' => (new MiddlewareClass)],
            ['middleware' => $middlewareOne],
            ['middleware' => 'ServiceMiddlewareTwo'],
            ['middleware' => 'App\MiddlewareThree', 'path' => '/admin'],
            ['middleware' => ['App\MiddlewareFour', [$paramOne, $paramTwo]]],
        ]
    );
```

Nota: Puede ver que hay cuatro formas de registrar un Middleware: a) instancia de MiddlewareInterface, b) string con referencia a un servicio del container, c) string con referencia de namespace de clase y d) string con referencia de clase y array con parámetros de constructor. Más adelante se explicará en detalle cada una de estas formas.

#### Con una Respuesta por defecto

[](#con-una-respuesta-por-defecto)

```
    $app = new DMS\TornadoHttp\TornadoHttp(
        [],
        new DefaultResponse()
    );
```

#### Con un Contenedor de Servicios

[](#con-un-contenedor-de-servicios)

```
    $app = new DMS\TornadoHttp\TornadoHttp(
        [],
        new DefaultResponse(),
        new Container()
    );
```

Nota: El contenedor de servicios a utilizar debe respetar el estándar [PSR-11](https://www.php-fig.org/psr/psr-11/).

#### Con un Resolver de Middleware personalizado

[](#con-un-resolver-de-middleware-personalizado)

```
    $resolver = class () implements ResolverInterface {
        public function solve($middleware) : MiddlewareInterface {
            // ...
        };
    };

    $app = new DMS\TornadoHttp\TornadoHttp(
        [],
        new DefaultResponse(),
        new Container(),
        new $resolver()
    );
```

#### Con un Entorno de Ejecución

[](#con-un-entorno-de-ejecución)

```
    $app = new DMS\TornadoHttp\TornadoHttp(
        [],
        new DefaultResponse(),
        new Container(),
        null,
        'development'
    );
```

### Cola de Middlewares:

[](#cola-de-middlewares)

Tornado Http permite registrar middlewares de 3 formas distintas:

- mediante su `constructor`
- mediante el método `add()`
- mediante el método `addList()`

**Ejemplos:**

```
    // mediante el constructor
    $app = new DMS\TornadoHttp\TornadoHttp(
        [
            ['middleware' => (new MiddlewareClass)],
        ]
    );
```

```
    // mediante el método add()
    $app->add('ServiceMiddleware', '/', ['GET', 'POST'], ['dev', 'prod'], 0);
```

```
    // mediante el método addList()
    $app->addList([
        ['middleware' => (new MiddlewareClass)],
        ['middleware' => 'ServiceMiddleware'],
    ]);
```

Tornado Http dispone de una clase propia que resuelve automáticamente como ejecutar un middleware registrado.

Existen cuatro formas por defecto de registrar middlewares en Tornado Http utilizando su Resolver:

- mediante una `instancia de clase`
- mediante un `string` que hace referencia a un `servicio` contenido en el Contenedor de Servicios
- mediante un `string` que hace referencia un namespace de una `clase`
- mediante un `array`

Todos los middlewares deben implementar `\Psr\Http\Server\MiddlewareInterface`.

**Ejemplos:**

```
    // mediante una instancia de clase
    $app->add(new MiddlewareClass);

    // mediante un string de referencia a un servicio del contenedor
    $app->add('ServiceMiddleware');

    // mediante un string de referencia a un namespace de clase
    $app->add(App\MiddlewareClass::class);

    // mediante un string de referencia a un namespace de clase y parámetros de constructor
    $app->add([App\MiddlewareClass::class, [$param1, $param2]]);
```

Cada middleware puede ser registrado con los siguientes filtros de ejecución opcionales:

- Métodos HTTP permitidos
- Path URL
- Entornos de ejecución permitidos

**Ejemplos:**

```
    // mediante el constructor
    $app = new DMS\TornadoHttp\TornadoHttp(
        [
            [
                'middleware' => (new MiddlewareTimeExecutionClass),
                'path'       => '/admin',
                'env'        => ['develop'],
            ],
            [
                'middleware' => (new MiddlewareLogClass),
                'methods'    => ['POST', 'PUT'],
                'env'        => ['production', 'develop'],
            ],
        ]
    );
```

### Container Trait:

[](#container-trait)

Tornado Http facilita un trait que puede ser utilizado dentro de los middlewares.

Cuando Tornado Http detecta que un middleware utiliza `Container\ContainerTrait` inyecta automáticamente el contenedor de servicios registrado en Tornado Http.

Se podrá acceder al contenedor de servicios, dentro del middleware, de la siguiente forma:

```
    class ExampleMiddleware implements \Psr\Http\Server\MiddlewareInterface
    {
        use \DMS\TornadoHttp\Container\ContainerTrait;

        public function getViewEngine()
        {
            return $this->getContainer()->get('view_engine');
        }

        // ...
    }
```

### Custom Resolver:

[](#custom-resolver)

Tornado Http permite registrar un resolver de middlewares personalizado. De esta forma puede reemplazar o extender el uso de las cuatro formas mencionadas para registrar middlewares.

**Ejemplo:**

```
    class CustomResolver implements ResolverInterface {
        public function solve(string $middlewareClass) : MiddlewareInterface {
            return new $middlewareClass();
        }
    }

    $app = new DMS\TornadoHttp\TornadoHttp();
    $app->setResolver(new CustomResolver());
```

### Resumen de Interfaces/Traits/Clases y Métodos:

[](#resumen-de-interfacestraitsclases-y-métodos)

**DMS\\TornadoHttp\\TornadoHttp**

MétodoDetalle\_\_construct(array = \[\], ResponseInterface = null, ContainerInterface = null, ResolverInterface = null, string = 'dev')Crea una instancia de Tornado Httphandle(ServerRequestInterface) : ResponseInterfaceEjecución de handlersadd(mixed, string = null, array = null, array = null, int = null)Agrega un Middleware a la colaaddList(array)Agrega una lista de Middlewares a la colagetMiddlewareIndex() : intDevuelve el índice actual de la cola de MiddlewaressetDI(ContainerInterface) : TornadoHttpAsigna un contenedor de serviciosgetDI() : ContainerInterfaceRecupera el contenedor de servicios asignadosetResponse(ResponseInterface) : TornadoHttpAsigna una respuesta por defectogetResponse() : ResponseInterfaceRecupera la respuesta del último middleware ejecutadosetContext(mixed) : TornadoHttpAsigna un contexto compartidogetContext() : mixedRecupera un contexto compartidosetResolver(ResolverInterface) : TornadoHttpAsigna un resolver de middlewaressetEnvironment(string) : TornadoHttpAsigna el entorno de ejecuciónresolveMiddleware(mixed) : MiddlewareInterfaceResuelve y ejecuta un Middleware**DMS\\TornadoHttp\\Container\\ContainerTrait**

MétodoDetallesetContainer(ContainerInterface) : selfAsigna un contenedor de serviciosgetContainer() : ContainerInterfaceRecupera el contenedor de servicios asignado**DMS\\TornadoHttp\\Container\\InjectContainerInterface**

MétodoDetallesetContainer(ContainerInterface)Asigna un contenedor de serviciosgetContainer() : ContainerInterfaceRecupera el contenedor de servicios asignado**DMS\\TornadoHttp\\Middleware\\Middleware**

MétodoDetallesetContainer(ContainerInterface) : MiddlewareAsigna un contenedor de serviciosgetContainer() : ContainerInterfaceRecupera el contenedor de servicios asignado**DMS\\TornadoHttp\\Resolver\\Resolver**

MétodoDetalle\_\_construct(ContainerInterface = null)Crea una instancia del resolversolve(MiddlewareInterface|string|array) : MiddlewareInterfaceResuelve un middleware**DMS\\TornadoHttp\\Resolver\\ResolverInterface**

MétodoDetallesolve(MiddlewareInterface|string|array) : MiddlewareInterfaceResuelve un middlewareInspiración:
------------

[](#inspiración)

- [Relay](http://relayphp.com/)
- [Zend Stratigility](https://github.com/zendframework/zend-stratigility)

Licencia:
---------

[](#licencia)

El proyecto se distribuye bajo la licencia MIT.

Sugerencias y colaboración:
---------------------------

[](#sugerencias-y-colaboración)

Daniel Spiridione -

###  Health Score

35

—

LowBetter than 80% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity14

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity80

Battle-tested with a long release history

 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.

###  Release Activity

Cadence

Every ~70 days

Recently: every ~231 days

Total

34

Last Release

1643d ago

Major Versions

v0.3.0 → v1.0.02015-07-27

v1.5.2 → v2.0.02018-01-29

2.1.3 → 3.0.02018-10-23

3.2.1 → 4.0.02021-08-13

PHP version history (5 changes)v0.2.0PHP &gt;=5.4.0

v1.1.1PHP &gt;=5.5.0

v1.5.0PHP &gt;=7.0.0

3.0.0PHP &gt;=7.2.0

4.0.0PHP &gt;=8.0.0

### Community

Maintainers

![](https://www.gravatar.com/avatar/9201384eb1ce8760370a1c360bedabcbf98846ff4109632c940100cbb83c555b?d=identicon)[danielspk](/maintainers/danielspk)

---

Top Contributors

[![danielspk](https://avatars.githubusercontent.com/u/5874643?v=4)](https://github.com/danielspk "danielspk (40 commits)")

---

Tags

httpphpmiddlewarecontainerrestpsr-15dmstornadodanielspkpsr15tornado-http

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/danielspk-tornadohttp/health.svg)

```
[![Health](https://phpackages.com/badges/danielspk-tornadohttp/health.svg)](https://phpackages.com/packages/danielspk-tornadohttp)
```

###  Alternatives

[mezzio/mezzio-authentication

Authentication middleware for Mezzio and PSR-7 applications

121.6M26](/packages/mezzio-mezzio-authentication)[wellrested/wellrested

Simple PHP Library for RESTful APIs

4818.7k4](/packages/wellrested-wellrested)[mezzio/mezzio-authentication-oauth2

OAuth2 (server) authentication middleware for Mezzio and PSR-7 applications.

28483.0k2](/packages/mezzio-mezzio-authentication-oauth2)[httpsoft/http-runner

Running PSR-7 components and building PSR-15 middleware pipelines

1455.0k5](/packages/httpsoft-http-runner)[httpsoft/http-basis

Simple and fast HTTP microframework implementing PSR standards

1334.9k1](/packages/httpsoft-http-basis)

PHPackages © 2026

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