borschphp / router
A FastRoute router implementation.
Installs: 1 103
Dependents: 3
Suggesters: 0
Security: 0
Stars: 1
Watchers: 0
Forks: 0
Open Issues: 1
Requires
- php: ^8.2
- nikic/fast-route: ^v1.3
- psr/http-message: ^1||^2
- psr/http-server-handler: ^1
- psr/http-server-middleware: ^1
Requires (Dev)
- laminas/laminas-diactoros: ^3
- pestphp/pest: ^3.0
- phpstan/phpstan: ^2.1
This package is auto-updated.
Last update: 2025-04-07 19:13:56 UTC
README
Borsch Router
An awesome router implementation with support for multiple routing engines, including `nikic/fast-route`.
Table of Contents
About The Project
A collection of router implementations, inspired by the one you can find in the excellent Mezzio Routing Interfaces. Among them :
- a router is based on nikic/fast-route
- a router is based on a tree structure
- a router is based on a simple comparator
You need to provide a PSR-7 ServerRequestInterface in order to match the routes.
A PSR-7 ResponseInterface must be returned by the route handler.
Getting Started
Prerequisites
You need PHP >= 8.2
to use Borsch\Router
but the latest stable version of PHP is always recommended.
It also requires an implementation of PSR-7 HTTP Message.
The Laminas Diactoros Project is used for testing, and in the examples below.
Installation
Via composer :
composer require borschphp/router
Usage
require_once __DIR__.'/vendor/autoload.php'; $router = new \Borsch\Router\FastRouteRouter(); $router->addRoute(new \Borsch\Router\Route( ['GET'], '/articles/{id:\d+}[/{slug}]', new ArticleHandler(), // Instance of RequestHandlerInterface 'articles.id.title' )); $server_request = \Laminas\Diactoros\ServerRequestFactory::fromGlobals(); // $route_result is an instance of RouteResultInterface $route_result = $router->match($server_request); // $route is an instance of RouteInterface (or false if no match) $route = $route_result->getMatchedRoute(); if (!$route) { return new \Laminas\Diactoros\Response('Not Found', 404); } // $response is an instance of ResponseInterface $response = $route->getHandler()->handle($server_request); // Send the response back to the client or other...
Available routers
Router Name | Description | Cache | Speed | Speed with cache | Variables | Optional Parts |
---|---|---|---|---|---|---|
FastRouteRouter |
A nikic/fast-route based router |
✅ | Medium | Fast | ✅ | ✅ |
TreeRouter |
A tree based router | ✅ | Fast | Very fast | ✅ | ❌ |
SimpleConditionalRouter |
A very simple comparator based router | ❌ | Very fast | ❌ | ❌ | ❌ |
Testing
This package uses Pest
as test framework.
To run tests :
./vendor/bin/pest tests
Mutation testing has also been added to this package:
XDEBUG_MODE=coverage ./vendor/bin/pest --mutate --parallel
Contributing
Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement". Don't forget to give the project a star! Thanks again!
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature
) - Commit your Changes (
git commit -m 'Add some AmazingFeature'
) - Push to the Branch (
git push origin feature/AmazingFeature
) - Open a Pull Request
License
Distributed under the MIT License. See License File for more information.
Acknowledgments
A big thanks to these projects for inspiration or because they're used in this one: