alexpts / php-simple-router
兼容PSR-7的简单路由器
Requires
- php: >=7.3
Requires (Dev)
- phpunit/phpunit: ^9.6
This package is auto-updated.
Last update: 2024-09-09 17:29:03 UTC
README
该路由器旨在通过输入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。