alanvdb / router
基于PSR的基本PHP路由器。
v0.5.1
2024-09-23 16:51 UTC
Requires
- psr/http-message: ^2.0
Requires (Dev)
- phpunit/phpunit: ^11.3
README
A PHP PSR-7兼容的路由库
概述
该项目为PHP提供了一种简单而灵活的路由系统,兼容PSR-7 HTTP消息接口。它旨在帮助您高效地管理应用程序路由,支持懒加载路由定义、路径匹配、请求处理和URI生成。
此路由系统的主要组件包括
- Route:表示单个路由,包括方法、路径、参数和目标动作。
- RouteCollection:管理一组路由,便于迭代和检索。
- RequestMatcher:将传入的HTTP请求与合适的路由匹配。
- UriGenerator:根据集合中定义的路由生成URI。
- RouterFactory:用于创建上述组件实例的工厂。
安装
要安装路由器,请使用Composer
composer require alanvdb/router
用法
定义和使用路由
Route
类允许您通过指定HTTP方法、路径和目标动作(例如控制器方法)来定义路由。然后可以将这些路由添加到RouteCollection
中。
示例
use AlanVdb\Router\Route; use AlanVdb\Router\RouteCollection; $route = new Route('home', 'GET', '/home', fn() => 'HomeController@index'); $routeCollection = new RouteCollection(); $routeCollection->add('home', fn() => $route);
匹配请求
RequestMatcher
类将传入的PSR-7ServerRequestInterface
与RouteCollection
中的路由进行匹配。如果找到匹配的路由,则返回;否则,抛出适当的异常。
示例
use AlanVdb\Router\RequestMatcher; use Psr\Http\Message\ServerRequestInterface; $requestMatcher = new RequestMatcher($routeCollection); try { $matchedRoute = $requestMatcher->matchRequest($request); // Handle the matched route } catch (MethodNotAllowed $e) { // Handle method not allowed } catch (RouteNotFound $e) { // Handle route not found }
生成URI
UriGenerator
类根据您的RouteCollection
中定义的路由生成URI。这在创建应用程序内的链接时非常有用。
示例
use AlanVdb\Router\UriGenerator; $uriGenerator = new UriGenerator($routeCollection); $uri = $uriGenerator->generate('home', ['id' => 1]); echo $uri; // Outputs: /home/1
使用RouterFactory
RouterFactory
简化了路由、路由集合、请求匹配器和URI生成器的创建。
示例
use AlanVdb\Router\Factory\RouterFactory; $factory = new RouterFactory(); $route = $factory->createRoute('home', 'GET', '/home', fn() => 'HomeController@index'); $routeCollection = $factory->createRouteCollection(); $routeCollection->add('home', fn() => $route); $requestMatcher = $factory->createRequestMatcher($routeCollection); $uriGenerator = $factory->createUriGenerator($routeCollection);
API文档
Route
方法
getName(): string
:返回路由的名称。getPath(): string
:返回路由的路径。getMethods(): array
:返回允许的路由HTTP方法数组。getParams(): array
:返回与路由关联的参数关联数组。setParams(array $params): self
:设置路由的参数。如果参数键不是字符串,则抛出InvalidRouteParamProvided
异常。getTarget(): mixed
:返回与路由关联的目标动作(一个可调用对象)。
RouteCollection
方法
add(string $name, callable $route): void
:向集合中添加一个新的路由。get(string $name): RouteInterface
:通过名称检索一个路由。has(string $name): bool
:检查集合中是否存在具有给定名称的路由。
RequestMatcher
方法
matchRequest(ServerRequestInterface $request): RouteInterface
:将传入的请求与路由进行匹配。如果没有找到匹配项,则抛出MethodNotAllowed
或RouteNotFound
异常。
UriGenerator
方法
generate(string $name, array $params = []): string
:基于路由名称和参数生成URI。
RouterFactory
方法
createRoute(string $name, string $methods, string $path, callable $target): RouteInterface
:创建一个新的路由实例。createRouteCollection(): RouteIteratorInterface & LazyContainerInterface
:创建一个新的路由集合。createRequestMatcher(RouteIteratorInterface & LazyContainerInterface $routeCollection): RequestMatcherInterface
:创建一个新的请求匹配器。createUriGenerator(RouteIteratorInterface & LazyContainerInterface $routeCollection): UriGeneratorInterface
:创建一个新的URI生成器。
测试
要运行测试,请使用以下命令
vendor/bin/phpunit
测试位于tests
目录中,并覆盖了主组件的功能,例如Route
、RouteCollection
、RequestMatcher
和UriGenerator
。
许可证
本项目采用MIT许可证。有关详细信息,请参阅LICENSE文件。