简单的路由工具

1.4.0 2021-07-26 19:52 UTC

This package is auto-updated.

Last update: 2024-09-27 03:11:59 UTC


README

简单的路由工具

如何使用

这个库将如何处理结果回调的决定权交给你,只关注路由

1. 添加新路由

该库提供了三种方法将新路由添加到路由器中。以下是最推荐的1.2方法。

1.1. 路由创建模式

每种方法的结构几乎相同

  1. path - 路由器将匹配的路径字符串。它必须以正斜杠结束才能正确工作。对于包含变量参数的段,包含参数名称的花括号(例如,'/offer/{id}'

  2. callback - 包含将引用路由的类/对象实例名称的数组(例如,[IndexController::class, "index"])。它也可以是一个匿名函数(例如,fn() => print("Hello from anonymous function!")

  3. (可选) methods - 包含对应于该路由的HTTP方法名称的大写字母数组(例如,["POST", "OPTION"])。默认为["GET", "HEAD"]

  4. (可选) params - 以参数名称为键,与它们匹配的正则表达式为值的关联数组。如果你在路径中使用了参数化段,你必须在这里提供该正则表达式(例如,["id" => "\d+"]

  5. (可选) defaults - 以参数名称为键,默认值作为值的关联数组。你可以为一些参数化段提供它们(例如,["id" => 1]

1.2. 从关联数组加载

创建一个新的Router实例,然后调用该实例的Router::insertConfig方法,传递一个具有上述参数的数组,例如。

    use SunnyFlail\Router\Router;
    $router = new Router();
    $router->insertConfig([
        [
            "index",
            "/",
            fn() => print("Talking to you from '/'!"),
        ] 
    ]);

1.3. 创建路由对象并插入它们

创建一个路由对象并调用Router::addRoutes,将对象作为参数提供。你可以在一次调用中插入任意多的路由,只需用逗号分隔即可。例如。

    use SunnyFlail\Router\Route;
    $routeOne = new Route("index", "/", fn() => print("Hello world, from index!"));
    $routeTwo = new Route(
        "offer", "/offer/{id}",
        fn($id) => printf("Hello world, from offer number %s!", $id),
        ["GET", "HEAD"],
        ["id" => "\d+"],
        ["id" => 1]
    );
    $router->addRoutes($routeOne, $routeTwo);

1.4. 手动插入路由数据

你也可以通过调用Router::addRoute方法手动插入数据。它的语法与创建新路由对象时相同。例如。

    $router->addRoute("login", "/login/", [LoginController::class, "login"]);

2. 路由

要开始路由,请调用Router::match,提供大写HTTP请求方法作为第一个参数,以及请求路径作为第二个参数。例如。

    $matchedData = $router->match($_SERVER["REQUEST_METHOD"], $_SERVER["REQUEST_PATH"]);

此方法返回一个SunnyFlail\Router\MatchedData类的实例,其中包含匹配的路由和从参数化段中刮取的数据。

要获取这些数据,请调用MatchedData::getData方法。它返回一个以参数名称为键的关联数组,并对应于键的刮取值。如果没有参数化参数,则可能返回空数组

要获取匹配的路由,请调用MatchedData::getRoute

如果没有任何路由匹配,则Router::match方法可能会抛出SunnyFlail\Router\NotFoundException

3. 对插入的路由进行操作

3.1. 从路由器获取路由对象

要获取路由,请调用Router::getRoute,并提供要搜索的路由名称作为参数。例如。

    $route = $router->getRoute("offer");

3.2. 生成URL

要生成指向选定路由的相对(到域名)URL,请调用Route::generateUrl方法。你可能需要提供一个关联数组来填充参数。

    $url = $route->generateUrl(["id" => 2]);