ooobii/quick-router

一个用于使用PHP快速简单地进行HTTP请求路由的库。

0.1 2022-03-27 15:07 UTC

This package is auto-updated.

Last update: 2024-09-27 21:47:21 UTC


README

Build Status Test Status Composer

一个使用PHP和Apache快速开始开发API/网络服务应用的简便方法。

注意! 文档尚未完成。使用说明中可能存在一些空白。

要求

  • PHP (7.3或更高版本)
  • Apache
    • 启用Rewrite扩展
    • 启用.htaccess文件

安装

此软件包可以通过composer安装

composer require ooobii/quick-router

为了使用此软件包,需要定义一个.htaccess文件/重写规则,以便所有请求都通过index.php文件处理。您可以通过执行以下PHP脚本来在网站的目录中创建/更新一个:

<?php
require_once __DIR__ . '/vendor/autoload.php';

ooobii\QuickRouter\Helpers\SetupHtaccess::createHtaccessFile();

此方法将在您项目的根目录中创建一个.htaccess文件。如果已经存在,则此软件包所需的重写规则将自动附加到其末尾。您也可以在Apache的虚拟主机配置中定义此方法生成的规则,如果您更愿意在那里使用它们。

使用方法

创建路由器

您可以通过实例化一个新的Router类来定义一个新的路由器

use \ooobii\QuickRouter\Router\Router;

$router = new Router('/api/v1', TRUE);

if(!$router->process()) {
    //url provided doesn't have a route specified.
}

您可以将两个参数传递给Router类的构造函数

  • "路由根目录"

    • 以提供的根目录开始的任何URL请求都将由路由器处理。
    • 如果请求的URL超出了此根目录的范围,则路由器将忽略该路由。

    例如,在上面的路由器中,URL http://<SITE>/v1/someEndpoint 不会由该路由器处理,但 http://<SITE>/api/v1/someEnpoint 会被处理,前提是已为它定义了路由。

  • "强制JSON输出"

    • false(默认值):允许每个路由处理程序对输出内容有完全控制权。
    • true:所有路由处理程序都尝试通过通过json_encode()传递处理程序的结果来转换为JSON。

您也可以定义具有不同根URL的多个路由器

use \ooobii\QuickRouter\Router\Router;

$router_v1 = new Router('/api/v1', TRUE);
$router_v2 = new Router('/api/v1', TRUE);

if(!$router_v1->process() && !$router_v2->process()) {
    //url provided doesn't have a route specified.
}

您可以通过将这些路由器通过引用传递给外部脚本文件来设置每个路由器的路由。必须将定义的所有路由器包含在index.php文件中。

在路由器中定义路由

错误处理路由

一旦您实例化了一个路由器,您就可以为特定HTTP错误代码遇到的错误添加处理程序

//define an error route for exceptions encountered during route handling.
$router->addErrorRoute(500, function($exception) {
    return [ 'error' => $exception->getMessage() ];
});

//define an error route for requests that do not have endpoints defined.
$router->addErrorRoute(404, function() {
    return [ 'error' => 'Endpoint not found.' ];
});

上述方法为特定的HTTP错误代码添加了返回处理程序。第一个参数是HTTP错误代码,第二个参数是当路由匹配时将被执行的回调函数。回调函数将接收异常对象作为其唯一参数。

注意: 在此示例中,假设启用了JSON输出强制。请确保您的路由处理程序返回适当的echo类型或基于要传输的内容输出适当的结果。

定义标准路由