hrafn/router

Hrafn项目的路由组件。

0.5.0 2020-06-02 09:10 UTC

This package is auto-updated.

Last update: 2024-09-13 01:48:07 UTC


README

Packagist Version Packagist PHP Version Support coverage report pipeline status

注意:该项目仍在开发中。在版本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或是一个回调函数。它们将按照传递的顺序应用。如果使用命名空间/分组,它们的中间件将首先应用。所以很容易通过中间件添加一个受限制的组。