Download the PHP package makise-co/http-router without Composer
On this page you can find all versions of the php package makise-co/http-router. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Informations about the package http-router
PSR HTTP Router
A PSR HTTP Router based on FastRoute with Middleware support
Requirements
- PHP >= 7.4
Installation
composer require makise-co/http-router
Features
- Middlewares
- Dependency Injection to Route Handlers (through PSR Container and php-di/invoker)
- Supports all of most common request handler declarations (Closures, callables, array-callables, class@method, class::method)
- Strict PSR standards following (PSR-7 and PSR-15), each route handler MUST return instance of PSR ResponseInterface
- High portability and customization (any implementation part can be replaced with your own implementation)
FAQ
-
How to get the Route instance that is processing the request?
- How to get route arguments?
Performance
For three million calls (using php-di/invoker):
For three million calls (using native function call implementation without DI):
Benchmark code can be found here.
- Benchmarks were performed on PHP 7.4 with OPcache enabled
- CPU: Intel Core i7-9750H 6 cores (CPU frequency during benchmarks: 4.07 GHz)
- OS: Ubuntu 20.04 (WSL 2)
Usage
Lazy resolving
When you write your route handlers using Controllers approach you may want to inject some dependencies into your Controller constructor. By default, all dependencies will be automatically injected into your controller after you register the route.
This behavior can cause various bugs or even errors in your application. Let's imagine your controller class looks like:
And you are registering a route for the index method of PostController:
After that an instance of your PostController class will be immediately created, and an instance of ORM will be injected into it. ORM can initiate database connections and query for database schema information.
In multi-process app architecture (when your app has a master process and many worker processes)
this may lead to unnecessary resource consumption
(draining of database connections, memory consumption, slower application boot time).
And it can even lead to an error in the application, especially with Swoole backends, because all non-blocking I/O operations
MUST be performed in the Coroutine context.
This package offers a simple solution to avoid all kind of these problems: Lazy route handlers resolution.
Just use RouteCollectorLazyFactory
instead of RouteCollectorFactory
.
Instead of immediately resolving the route handlers, this process is postponed until the routes compilation stage.
The compilation stage of the routes occur when you call the "getRouter" method on the "RouteCollector" instance.
This means that the route handlers are resolved at the time the "getRouter" method is called.
Error handling
More complete examples can be found here.
All versions of http-router with dependencies
psr/http-server-middleware Version ^1.0
psr/container Version ^1.0
nikic/fast-route Version ^1.3
php-di/invoker Version ^2.1
makise-co/middleware Version ^1.0