hrafn / router
Hrafn项目的路由组件。
0.5.0
2020-06-02 09:10 UTC
Requires
- php: >=7.4.2
- ext-json: *
- ext-mbstring: *
- jitesoft/container: ^4.0
- jitesoft/datastructures: 4.*
- jitesoft/exceptions: 2.3.*
- psr/container: 1.0.*
- psr/http-message: 1.0.*
- psr/http-server-handler: 1.0.*
- psr/http-server-middleware: 1.0.*
- psr/log: 1.1.*
Requires (Dev)
- guzzlehttp/guzzle: ^6.5
- phpunit/phpunit: ^9.1.5
- roave/security-advisories: dev-master
- squizlabs/php_codesniffer: ^3.5.5
Suggests
- jitesoft/container: Package with a PSR Container with dependency injection functionality working out of the box with Hrafn packages.
- jitesoft/loggers: Package with PSR Loggers working out of the box with Hrafn packages.
README
注意:该项目仍在开发中。在版本1.0.0之前,它应被视为非常不稳定。
这是什么?
Hrafn路由器是一个使用树结构映射路由的路由实现。
构建它的主要原因是为了测试是否有可能构建一个路由器,该路由器能够使用树而不是其他方式更快地处理和路由路径。
项目处于早期阶段,当前版本不稳定。也就是说:不建议在生产环境中使用此路由器。
PSR和接口绑定
本项目使用并实现了以下PSR标准
- PSR4 自动加载
- PSR3 日志记录
- PSR7 消息
- PSR11 容器
- PSR15 处理程序
大多数接口都可以通过选择合适的容器实现进行交换。如果没有定义容器,将使用一个基于SimpleMap
结构的容器。
请随意阅读API文档,了解更多关于您可以用来自定义项目的接口信息。
用法
路由器期望每个路径映射到一个给定的操作。操作可以是标准的可调用对象或类中的一个方法。您可以分组/命名空间路径,并且提供变量占位符。
简单示例
使用标准get路由的示例
<?php
use Hrafn\Router;
$router = new Router(/*pass your PSR-11 container here if wanted.*/);
$builder = $router->getBuilder();
$builder->get('test', function(ServerRequest $request) {
// Do something.
return new Response(); // PSR-7 response.
});
// Handle the request:
$router->handle(ServerRequest::fromGlobals()); // PSR-7 Request.
参数
要将参数绑定到请求路径,使用以下标准
{parameter} // Required parameter.
{?parameter} // Optional parameter.
示例
<?php
$builder->get('test/{name}', function($name) {
});
当调用/test/abc
时,$name
参数将被设置为abc
。
使用类处理器
除了使用函数作为回调外,还可以使用类中的方法。当这样做时,路由器将首先尝试使用容器创建该类,然后根据类构造函数中的参数,它将尝试使用绑定的或默认的参数注入它。
类创建后,将使用路由定义的参数调用该方法。如果第一个参数是RequestInterface
的实现,则请求将首先传递。
中间件
可以直接使用中间件,中间件必须实现Psr\Http\Server\MiddlewareInterface
或是一个回调函数。它们将按照传递的顺序应用。如果使用命名空间/分组,它们的中间件将首先应用。所以很容易通过中间件添加一个受限制的组。