meraki/http-router

将HTTP请求映射到HTTP响应,支持PHP 8+。

0.8.0 2022-12-30 09:42 UTC

This package is auto-updated.

Last update: 2024-09-21 13:15:56 UTC


README

将HTTP请求映射到HTTP响应,支持PHP 8+。

特性

  • 根路径 "/" 映射
  • 配置根路径子命名空间
  • GET HTTP方法
  • POST HTTP方法
  • PUT HTTP方法
  • DELETE HTTP方法
  • OPTIONS HTTP方法
  • 如果没有定义HEAD请求处理器,则返回GET请求处理器
  • asterix OPTIONS "OPTIONS *" HTTP方法
  • 防止替代根路径子命名空间映射(例如,"/" 也可在 "/home" 中使用)
  • 配置操作前缀
  • 配置操作后缀
  • 基于名词的URL(复数)(RESTful URL)
  • 基于动词的URL(单数)(操作)
  • 覆盖复数段(从自动复数-单数转换中排除单词)
  • 覆盖单数段(从自动单数-复数转换中排除单词)
  • 支持从GET请求处理器获取HEAD请求
  • 可变路由(尾部参数)
  • 嵌套资源
  • 必需参数路由
  • 可选参数路由
  • 整数参数
  • 字符串参数
  • 数组参数
  • 浮点参数
  • 为405结果提供的允许方法
  • 为406结果提供的接受类型
  • 缓存结果
  • 日志记录
  • 提供自定义屈折(用于名词复数转换)
  • 提供自定义记录器
  • 提供自定义协商者(用于协商媒体类型/语言等)
  • 协商媒体类型
  • 协商语言
  • Swoole的并发支持
  • 反向路由
  • 无需定义父资源类即可使用(注意事项1)
  • 路由导出器(CLI)
  • 从路由创建类(CLI)
  • 枚举支持?
  • 值对象支持?
  • 更好地区分何时需要复数或名词(因此不需要像以前那样覆盖复数单词)
  • 联合类型(int|string)

安装

composer install meraki/http-router

使用

基本的配置,适用于大多数小型项目,且与所有PHP-FIG PSR兼容

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

use Meraki\Http\AutoRouter;
use Laminas\Diactoros\ServerRequestFactory;

$router = new AutoRouter('Project\\Http\\');
$request = ServerRequestFactory::fromGlobals();

$result = $router->route($request);

switch ($result->status) {
	case 200:
		// get the matched route
		$route = $result->route;

		// access info about the matching route
		$requestHandler = $route->requestHandler;
		$invokeMethod = $route->invokeMethod;
		$params = $route->parameters;
		break;

	case 404:
		// the request that couldn't be matched
		$request = $result->request;
		default;

	case 405:
		// fully qualified class name that was built
		$allowedMethods = $result->allowedMethods;
		default;

	default:
		// 500 internal server error
}

要查看其他用例,请查看源代码中的 examples 目录。对于更高级的设置,请参阅文档,特别是配置部分。

注意事项

  1. 只有当有与子资源相同的HTTP方法定义的父资源时,才能匹配子资源

例如,以下HTTP请求

POST /contact/0412345678/ping

只有在以下两个类存在的情况下才能正常工作

$parentResource = Project\Http\Contact\PostAction::class;
$childResource = Project\Http\Contact\Ping\PostAction::class;

在路由过程中不会在任何时刻实例化 $parentResource,但它必须存在,并且 $childResource 必须与 $parentResource 具有相同的签名。

注意

  • 此库有意决定不依赖于PSR7进行请求和响应对象。这提供了与不同HTTP实现之间最大的兼容性。

贡献

请参阅 CONTRIBUTING.md