cocoon-projet / routing
A simple and powerful PHP router
Requires
- php: ^8.0
- cocoon-projet/di: ^1.2.2
- laminas/laminas-diactoros: ^3.2
- laminas/laminas-httphandlerrunner: ^2.3
- nikic/fast-route: ^1.3
- psr/http-message: ^1.0
- psr/http-server-handler: ^1.0
- psr/http-server-middleware: ^1.0
Requires (Dev)
- phpstan/phpstan: ^1.0
- phpunit/phpunit: ^9.0
- squizlabs/php_codesniffer: ^3.0
- tracy/tracy: ^2.10
This package is auto-updated.
Last update: 2025-05-21 08:38:21 UTC
README
cocoon-projet/routing
Un routeur PHP moderne et flexible pour vos applications web
Description
cocoon-projet/routing est une librairie de routage PHP 8 qui offre une API simple et intuitive pour gérer les routes de votre application web. Elle utilise FastRoute en interne et supporte les fonctionnalités modernes de PHP 8.
Caractéristiques
- Compatible PHP 8.0+
- Support des méthodes HTTP (GET, POST, PUT, DELETE, PATCH, HEAD)
- Routes nommées
- Groupes de routes
- Patterns de validation de paramètres
- Cache des routes
- Support des contrôleurs avec autowiring
- Interface Facade pour une utilisation simplifiée
- Middleware PSR-15
- Tests unitaires complets
Installation
composer require cocoon-projet/routing
Utilisation
Configuration de base
use Cocoon\Routing\Router; $router = Router::getInstance(); // Route simple $router->get('/home', 'App\Controllers\HomeController@index'); // Route avec paramètres $router->get('/user/{id}', 'App\Controllers\UserController@show'); // Route avec validation de paramètres $router->get('/post/{id}', 'App\Controllers\PostController@show') ->with('id', '[0-9]+');
Utilisation de la Facade
use Cocoon\Routing\Facade\Route; // Routes simples Route::get('/home', 'App\Controllers\HomeController@index'); Route::post('/user', 'App\Controllers\UserController@store'); // Route avec plusieurs méthodes Route::match(['GET', 'POST'], '/api/users', 'App\Controllers\Api\UserController@handle'); // Route avec validation de paramètres Route::get('/post/{id}', 'App\Controllers\PostController@show') ->with('id', '[0-9]+'); // Routes nommées Route::get('/user/{id}', 'App\Controllers\UserController@show') ->name('user.show');
Groupes de routes
// Groupe de routes avec préfixe Route::group('admin', function() { Route::get('/dashboard', 'App\Controllers\Admin\DashboardController@index'); Route::get('/users', 'App\Controllers\Admin\UserController@index'); }); // Groupe avec validation de paramètres Route::group('api', function() { Route::get('/users/{id}', 'App\Controllers\Api\UserController@show') ->with('id', '[0-9]+'); });
Routes RESTful
// Création de routes RESTful pour une ressource Route::resource('posts', 'App\Controllers\PostController');
Cela crée automatiquement les routes suivantes :
- GET /posts (index)
- GET /posts/add (add)
- POST /posts/create (create)
- GET /posts/{id} (show)
- GET /posts/{id}/edit (edit)
- PUT /posts/{id} (update)
- DELETE /posts/{id} (delete)
Middleware
use Cocoon\Routing\Middleware\DispatcherMiddleware; // Configuration du middleware $middleware = new DispatcherMiddleware($router); // Utilisation avec un framework PSR-15 $response = $middleware->process($request, $handler);
Cache des routes
// Activation du cache des routes $router->cache(true, __DIR__ . '/cache');
Patterns de validation
// Patterns prédéfinis Route::get('/user/{id}', 'App\Controllers\UserController@show'); // {id} est automatiquement validé comme numérique // Patterns personnalisés Route::get('/post/{slug}', 'App\Controllers\PostController@show') ->with('slug', '[a-z0-9\-]+'); // Patterns multiples Route::get('/category/{category}/post/{slug}', 'App\Controllers\PostController@show') ->withs([ 'category' => '[a-z]+', 'slug' => '[a-z0-9\-]+' ]);
Tests
La librairie inclut une suite complète de tests unitaires. Pour exécuter les tests :
composer test
Pour générer un rapport de couverture de code :
composer test:coverage
Intégration Continue
Le projet utilise GitHub Actions pour l'intégration continue. Les tests sont exécutés automatiquement sur :
- PHP 8.0
Contribution
Les contributions sont les bienvenues ! N'hésitez pas à :
- Fork le projet
- Créer une branche pour votre fonctionnalité
- Commiter vos changements
- Pousser vers la branche
- Ouvrir une Pull Request
Licence
Ce projet est sous licence MIT. Voir le fichier LICENSE pour plus de détails.