alexpts/php-simple-router

兼容PSR-7的简单路由器

1.0.0 2023-05-09 14:38 UTC

This package is auto-updated.

Last update: 2024-09-09 17:29:03 UTC


README

phpunit codecov 兼容PSR-7的简单路由器

该路由器旨在通过输入HTTP请求将控制权传递给请求处理器。整个路由被分成处理特定任务的小组件。

路由器

一个对象,其中包含路径/正则表达式、一系列对HTTP方法或请求变量的限制,以及需要调用此路径的处理程序。

$route2 = new Route('/blog/{id}/', $endPoint2, ['id' => '\d+']);

$route = new Route('/{lang}/users/{id}/{action}/', $endPoint, [
	'lang' => 'ru|en',
	'action' => '[a-z0-9_]+',
	'id' => '\d+',
], Route::ONLY_XHR);

CollectionRoute

用于操作路由集合的对象。路由以特定优先级添加到路由集合中。方法getRoutes返回一个按优先级排序的所有路由的数组。

Matcher

一个对象,基于路由集合和当前请求URI搜索活动路由。简单的搜索第一个匹配项(最优先的路由)

$matcher = new Matcher();
$uri = '/profile/23/';
$routes = ...; // CollectionRoute instance
$endPoint = $matcher->matchFirst($routes, $uri); // IPoint instance

可以获取所有endPoint对象,而不仅仅是第一个。方法match返回一个生成器。通过生成器获取所有匹配路由的endPoint对象。

 foreach ($matcher->match($routes, $uri) as $endPoint) {
 	...
 }

由于这种结构,可以执行小的处理器一个接一个。

EndPoint

所有处理器都支持IPoint接口,用于创建具有所需参数的请求处理器并调用具有所需参数的处理器。附带一系列endPoint实现,可以帮助您简要而清晰地描述应用程序的路由规则。

CallablePoint

用于调用任何callable类型的处理器。

$endPoint = new Point\CallablePoint([
	'callable' => function () {
		return '404';
	}
]);
ControllerPoint

明确指定控制器类和方法。

$endPoint = new Point\ControllerPoint([
	'controller' => 'CollectionRouteTest',
	'action' => 'action'
]);
DynamicController

控制器类从请求变量:controller动态生成,该变量是必需的。操作从请求变量:action获取(默认为index

$endPoint = new Point\DynamicController([
	'prefix' => 'Demo'
]);
ControllerDynamicAction

DynamicController类似,但控制器是明确指定的,而不是从请求变量:controller动态获取。

$endPoint = new Point\ControllerDynamicAction([
	'controller' => SomeController::class
]);
创建新的endPoint

覆盖每个项目的特定性非常困难,这将是多余的。您可以根据基本类或从头开始轻松创建更特定的IPoint类。此类项目的示例是DynamicBundleController类。它旨在展示如果默认值因某种原因不适用,如何轻松简单地创建针对自己项目的endPoint。