alanvdb/router

基于PSR的基本PHP路由器。

v0.5.1 2024-09-23 16:51 UTC

This package is auto-updated.

Last update: 2024-09-23 16:52:05 UTC


README

A PHP PSR-7兼容的路由库

概述

该项目为PHP提供了一种简单而灵活的路由系统,兼容PSR-7 HTTP消息接口。它旨在帮助您高效地管理应用程序路由,支持懒加载路由定义、路径匹配、请求处理和URI生成。

此路由系统的主要组件包括

  1. Route:表示单个路由,包括方法、路径、参数和目标动作。
  2. RouteCollection:管理一组路由,便于迭代和检索。
  3. RequestMatcher:将传入的HTTP请求与合适的路由匹配。
  4. UriGenerator:根据集合中定义的路由生成URI。
  5. 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-7ServerRequestInterfaceRouteCollection中的路由进行匹配。如果找到匹配的路由,则返回;否则,抛出适当的异常。

示例

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:将传入的请求与路由进行匹配。如果没有找到匹配项,则抛出MethodNotAllowedRouteNotFound异常。

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目录中,并覆盖了主组件的功能,例如RouteRouteCollectionRequestMatcherUriGenerator

许可证

本项目采用MIT许可证。有关详细信息,请参阅LICENSE文件。