mateodioev/http-router

支持URL中变量的简单PHP路由器

v1.2.2 2023-06-24 21:08 UTC

This package is auto-updated.

Last update: 2024-09-12 16:05:24 UTC


README

⚠️ 本项目仅用于教育目的。 它不打算用于生产环境。

用法

use Mateodioev\HttpRouter\exceptions\{HttpNotFoundException, RequestException};
use Mateodioev\HttpRouter\{Request, Response, Router};

$router = new Router();

// Register your endpoints here
$router->get('/', function (Request $r) {
    return Response::text('Hello world!');
});

$router->run();

方法

您可以使用Router::getRouter::postRouter::putRouter::patchRouter::delete方法来注册您的端点。

$router->myHttpMethod($uri, $callback);
  • $uri是端点的路径。
  • $callback是当请求端点时将被执行的功能。每个回调(操作)必须返回Mateodioev\HttpRouter\Response类的实例或抛出InvalidReturnException异常。

静态文件

您可以使用static方法将目录中的所有静态文件进行映射。

$router->static($baseUri, $path, $methods);
// Default methods are GET

示例

tree
.
├── index.php
└── styles.css

1 directory, 2 files
$router->static('/docs', 'public/');

现在您可以访问以下uri

  • /docs/index.php
  • /docs/styles.css

处理所有HTTP方法

您可以使用Router::all方法使用一个回调处理所有HTTP方法。

$router->all($uri, $callback);

路径参数

您可以在端点中使用路径参数。路径参数由一个方括号后跟参数名称定义。

/users/{id}

$router->get('/page/{name}', function (Request $r) {
    return Response::text('Welcome to ' . $r->param('name'));
});

注意:您可以通过在参数名称后添加问号来使参数可选。

/users/{id}?

$router->get('/page/{name}?', function (Request $r) {
    $pageName = $r->param('name') ?? 'home'; // If the parameter is not present, the method return null
    return Response::text('Welcome to ' . $pageName);
});

请求数据

您可以使用以下方法获取所有请求数据

  • Request::method()返回请求的HTTP方法。
  • Request::uri()返回请求的URI。
  • Request::url()返回请求的URL。
  • Request::param($name, $default = null)返回名为$name的参数的值或null(如果参数不存在)。
  • Request::params()返回所有请求URI参数。
  • Request::headers()返回一个包含所有请求头的数组。
  • Request::body()返回请求体(来自php://input)。
  • Request::data()返回一个包含所有请求数据的数组。当Content-Type是application/x-www-form-urlencodedmultipart/form-data时使用此方法。
  • Request::files()返回一个包含所有请求文件的数组。
  • Request::query()返回一个包含uri中所有查询参数的数组。

待办事项列表

  • 添加中间件支持。
  • 添加自定义错误处理器支持。