PHPackages                             cocoon-projet/pipe - 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. [Framework](/categories/framework)
4. /
5. cocoon-projet/pipe

ActiveLibrary[Framework](/categories/framework)

cocoon-projet/pipe
==================

Un gestionnaire de middlewares PSR-15 puissant et flexible pour PHP 8.0+

1.1.2(1y ago)111MITPHPPHP &gt;=8.0CI failing

Since Mar 3Pushed 1y ago1 watchersCompare

[ Source](https://github.com/cocoon-projet/pipe)[ Packagist](https://packagist.org/packages/cocoon-projet/pipe)[ RSS](/packages/cocoon-projet-pipe/feed)WikiDiscussions master Synced 6d ago

READMEChangelogDependencies (7)Versions (6)Used By (0)

Cocoon Pipe - Gestionnaire de Middlewares PSR-15
================================================

[](#cocoon-pipe---gestionnaire-de-middlewares-psr-15)

[![PHP Version](https://camo.githubusercontent.com/854124dd57cfd3aad3184fca9760bf1f33a5ec1e5d080cfbe8aa4e3337ba46e6/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7068702d253345253344382e302d3838393242462e737667)](https://php.net/)[![PSR-15](https://camo.githubusercontent.com/715fe19567469d13f5e8c2a2430501b6853988f14adeee4fb0775821d72c2a08/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5053522d31352d626c75652e737667)](https://www.php-fig.org/psr/psr-15/)

Un gestionnaire de middlewares PSR-15 puissant et flexible pour PHP 8.0+, avec support des attributs PHP 8, du routage conditionnel et de la priorisation des middlewares.

🚀 Caractéristiques
------------------

[](#-caractéristiques)

- ✨ Compatible PSR-15
- 🎯 Support des attributs PHP 8
- 🛣️ Routage flexible avec support des expressions régulières et wildcards
- ⚡ Middlewares conditionnels
- 📊 Système de priorité
- 🔍 Débogage intégré avec Tracy
- 📝 Logging complet des opérations

📦 Installation
--------------

[](#-installation)

```
composer require cocoon-projet/pipe
```

🎯 Utilisation de base
---------------------

[](#-utilisation-de-base)

```
use Cocoon\Pipe\Pipe;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\MiddlewareInterface;

// Création du pipeline
$pipe = new Pipe();

// Ajout de middlewares
$pipe->add(new SecurityMiddleware())
     ->add(new AuthMiddleware())
     ->add(new LoggerMiddleware());

// Vous pouvez aussi ajouter des middlewares via leur nom de classe
$pipe->add(App\Middlewares\SecurityMiddleware::class)
     ->add(App\Middlewares\AuthMiddleware::class)
     ->add(App\Middlewares\LoggerMiddleware::class);

// Traitement d'une requête
$response = $pipe->handle($request);
```

🛠️ Types de Middlewares
-----------------------

[](#️-types-de-middlewares)

### 1. Middleware Simple

[](#1-middleware-simple)

```
class SimpleMiddleware implements MiddlewareInterface
{
    public function process(
        ServerRequestInterface $request,
        RequestHandlerInterface $handler
    ): ResponseInterface {
        // Traitement avant
        $response = $handler->handle($request);
        // Traitement après
        return $response;
    }
}
```

### 2. Middleware avec Priorité

[](#2-middleware-avec-priorité)

```
use Cocoon\Pipe\Attribute\Priority;

#[Priority(100)]
class HighPriorityMiddleware implements MiddlewareInterface
{
    public function process(
        ServerRequestInterface $request,
        RequestHandlerInterface $handler
    ): ResponseInterface {
        return $handler->handle($request);
    }
}
```

### 3. Middleware avec Route

[](#3-middleware-avec-route)

```
use Cocoon\Pipe\Attribute\Route;

#[Route('api/*', methods: ['GET', 'POST'])]
class ApiMiddleware implements MiddlewareInterface
{
    public function process(
        ServerRequestInterface $request,
        RequestHandlerInterface $handler
    ): ResponseInterface {
        return $handler->handle($request);
    }
}
```

### 4. Middleware Conditionnel

[](#4-middleware-conditionnel)

```
use Cocoon\Pipe\Conditional\ConditionalMiddlewareInterface;

class AuthMiddleware implements MiddlewareInterface, ConditionalMiddlewareInterface
{
    public function process(
        ServerRequestInterface $request,
        RequestHandlerInterface $handler
    ): ResponseInterface {
        return $handler->handle($request);
    }

    public function shouldExecute(ServerRequestInterface $request): bool
    {
        return !$request->hasHeader('Authorization');
    }
}
```

🛣️ Patterns de Route Supportés
------------------------------

[](#️-patterns-de-route-supportés)

1. **Pattern Simple avec Wildcards**

```
#[Route('api/*')]          // Correspond à /api/users, /api/posts, etc.
#[Route('public/**')]      // Correspond à tous les sous-chemins de public/
```

2. **Expression Régulière**

```
#[Route('/^\/admin\/.*$/')]  // Correspond à tous les chemins commençant par /admin/
```

3. **Méthodes HTTP Spécifiques**

```
#[Route('api/*', methods: ['GET', 'POST'])]
```

🔄 Ordre d'Exécution des Middlewares
-----------------------------------

[](#-ordre-dexécution-des-middlewares)

Les middlewares sont exécutés selon les règles suivantes :

1. **Priorité** : Les middlewares sont triés par priorité croissante (0 par défaut)

    - Plus la valeur est basse, plus tôt le middleware sera exécuté
    - Utilisez l'attribut `#[Priority(value: int)]` pour définir la priorité
2. **Ordre d'ajout** : À priorité égale, l'ordre d'ajout est préservé

    - Premier ajouté = Premier exécuté (FIFO)
    - Cet ordre est maintenu naturellement par le système
3. **Conditions d'exécution** :

    - Les routes sont vérifiées pour chaque middleware
    - Les conditions personnalisées sont évaluées
    - Un middleware n'est exécuté que si toutes ses conditions sont remplies

🐛 Débogage avec Tracy
---------------------

[](#-débogage-avec-tracy)

La bibliothèque intègre Tracy pour un débogage avancé :

```
use Tracy\Debugger;

// Configuration de base
Debugger::enable(Debugger::DEVELOPMENT);
Debugger::$logDirectory = __DIR__ . '/logs';

// Configuration recommandée
$logDir = __DIR__ . '/logs';
if (!is_dir($logDir)) {
    mkdir($logDir, 0777, true);
}

// Nettoyage automatique des logs
$now = time();
$maxAge = 7 * 24 * 60 * 60; // 7 jours
foreach (glob($logDir . '/*') as $file) {
    if (is_file($file) && $now - filemtime($file) >= $maxAge) {
        unlink($file);
    }
}
```

🧪 Tests
-------

[](#-tests)

```
# Exécution des tests
composer test

# Vérification du style de code
composer cs-check

# Correction automatique du style
composer cs-fix
```

🤝 Contribution
--------------

[](#-contribution)

Les contributions sont les bienvenues ! Veuillez :

1. Fork le projet
2. Créer une branche pour votre fonctionnalité
3. Commiter vos changements
4. Pousser vers la branche
5. Ouvrir une Pull Request

📝 Licence
---------

[](#-licence)

MIT License. Voir le fichier [LICENSE](LICENSE) pour plus de détails.

🔍 Exemples Complets
-------------------

[](#-exemples-complets)

Voir le fichier [examples/index.php](examples/index.php) pour des exemples complets d'utilisation.

⚠️ Notes Importantes
--------------------

[](#️-notes-importantes)

- Requiert PHP 8.0 ou supérieur
- Suit les standards PSR-15
- Les middlewares conditionnels doivent implémenter `ConditionalMiddlewareInterface`
- Les attributs de route et de priorité sont optionnels
- Les logs sont automatiquement nettoyés après 7 jours
- Les wildcards dans les routes sont non-gourmands par défaut
- Le système de priorité est optimisé pour maintenir l'ordre d'insertion
- Les middlewares peuvent être ajoutés via une instance ou via leur nom de classe complet

###  Health Score

33

—

LowBetter than 75% of packages

Maintenance46

Moderate activity, may be stable

Popularity7

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity61

Established project with proven stability

 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 ~374 days

Total

5

Last Release

403d ago

PHP version history (4 changes)1.0.0PHP &gt;=7.1.0

1.0.1PHP ^7.1

1.1.0PHP ^8.0

1.1.2PHP &gt;=8.0

### Community

Maintainers

![](https://www.gravatar.com/avatar/5b019cffcdf77ab35448666ea712d4263ae3afd4bc0110de6a267936e3dba08d?d=identicon)[cocoon-projet](/maintainers/cocoon-projet)

---

Top Contributors

[![cocoon-projet](https://avatars.githubusercontent.com/u/28481301?v=4)](https://github.com/cocoon-projet "cocoon-projet (11 commits)")

---

Tags

responserequesthandlerpsr-15middelware

###  Code Quality

TestsPHPUnit

Code StylePHP\_CodeSniffer

### Embed Badge

![Health badge](/badges/cocoon-projet-pipe/health.svg)

```
[![Health](https://phpackages.com/badges/cocoon-projet-pipe/health.svg)](https://phpackages.com/packages/cocoon-projet-pipe)
```

###  Alternatives

[cakephp/cakephp

The CakePHP framework

8.8k18.5M1.6k](/packages/cakephp-cakephp)[psr/http-server-handler

Common interface for HTTP server-side request handler

175101.3M921](/packages/psr-http-server-handler)[psr/http-server-middleware

Common interface for HTTP server-side middleware

18091.2M1.5k](/packages/psr-http-server-middleware)[cakephp/authentication

Authentication plugin for CakePHP

1153.6M67](/packages/cakephp-authentication)[neos/flow

Flow Application Framework

862.0M451](/packages/neos-flow)[cakephp/authorization

Authorization abstraction layer plugin for CakePHP

742.2M34](/packages/cakephp-authorization)

PHPackages © 2026

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