berlioz / router
Berlioz Router 是一个遵循 PSR-7(HTTP 消息接口)标准的 PHP 库,用于管理 HTTP 路由。
v2.1.0
2023-08-29 11:13 UTC
Requires
- php: ^8.0
- berlioz/http-message: ^2.0.0
- psr/http-message: ^1.0
- psr/log: ^1.0
Requires (Dev)
- phpunit/phpunit: ^9.6
This package is auto-updated.
Last update: 2024-08-29 13:27:06 UTC
README
Berlioz Router 是一个用于管理 HTTP 路由的 PHP 库,遵循 PSR-7(HTTP 消息接口)标准。
安装
Composer
您可以使用 Composer 安装 Berlioz Router,这是推荐的安装方式。
$ composer require berlioz/router
依赖项
- PHP ^8.0
- 包
- berlioz/http-message
- psr/log
用法
路由
创建路由
您可以使用以下方式创建简单路由
use Berlioz\Router\Route; $route = new Route('/path-of/my-route'); $route = new Route('/path-of/my-route/{attribute}/with-attribute');
构造函数参数包括
- defaults:一个关联数组,用于在生成路由时设置属性默认值
- requirements:一个关联数组,用于限制属性的格式。键是属性的名称,值是验证正则表达式
- name:路由名称
- method:允许的 HTTP 方法数组,或只是一个方法
- host:允许的主机数组,或只是一个主机
- priority:您可以为路由指定优先级(默认:-1)
路由分组
一个路由可以转换为分组,只需将另一个路由关联到它们即可。
use Berlioz\Router\Route; $route = new Route('/path'); $route->addRoute($route2 = new Route('/path2')); // Path will be: /path/path2
子路由继承父路由的属性、要求等
属性
路由可以接受可选属性,您需要用括号将可选部分括起来。
$route = new \Berlioz\Router\Route('/path[/optional-part/{with-attribute}]');
您还可以直接在路径中定义要求
- 在属性名称后添加正则表达式(用“:”分隔)。
- 在属性名称后添加类型名称(用“::”分隔)。
$route = new \Berlioz\Router\Route('/path/{attributeName:\d+}'); $route = new \Berlioz\Router\Route('/path/{attributeName::int}');
支持的定义类型
int
(相当于\d+
)float
(相当于\d+(\.\d+)
)uuid4
(相当于[0-9A-Fa-f]{8}\-[0-9A-Fa-f]{4}\-[0-9A-Fa-f]{4}\-[0-9A-Fa-f]{4}\-[0-9A-Fa-f]{12}
)slug
(相当于[a-z0-9]+(?:-[a-z0-9]+)*
)md5
(相当于[0-9a-fA-F]{32}
)sha1
(相当于[0-9a-fA-F]{40}
)domain
(相当于([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}
)
路由器
路由器是包中的主要功能,它由 Router
类定义。它可以根据 ServerRequestInterface
对象(参见 PSR-7)找到合适的 Route
对象。
use Berlioz\Http\Message\ServerRequest; use Berlioz\Router\Route; use Berlioz\Router\Router; // Create server request or get them from another place in your app $serverRequest = new ServerRequest(...); // Create router $router = new Router(); $router->addRoute( new Route('/path-of/my-route'), new Route('/path-of/my-route/{attribute}/with-attribute') ); $route = $router->handle($serverRequest);
生成路径
您可以直接使用 Router
对象生成带有一些参数的路径。
use Berlioz\Router\Exception\NotFoundException; use Berlioz\Router\Router; $router = new Router(); // ...add routes try { $path = $router->generate('name-of-route', ['attribute1' => 'value']); } catch (NotFoundException $exception) { // ... not found route }
方法返回的是字符串格式的路径,或者在无法生成路径时抛出异常(例如,没有所有必需的参数)。
有效路径
您可以使用 ServerRequestInterface
验证,以确定路径是否可以被路由处理。
use Berlioz\Http\Message\ServerRequest; use Berlioz\Router\Router; $serverRequest = new ServerRequest(...); $router = new Router(); // ...add routes /** bool $valid Valid path ?*/ $valid = $router->isValid($serverRequest);
方法返回的是一个 boolean
值。