meraki / http-router
将HTTP请求映射到HTTP响应,支持PHP 8+。
0.8.0
2022-12-30 09:42 UTC
Requires
- php: ^8
- doctrine/inflector: ^2.0
- psr/http-message: ^1.0
- psr/http-server-handler: ^1.0
- psr/http-server-middleware: ^1.0
- psr/log: ^3.0
- willdurand/negotiation: ^3.1
Requires (Dev)
- captainhook/captainhook: ^5.11
- friendsofphp/php-cs-fixer: ^3.13
- laminas/laminas-diactoros: ^2.22
- marcocesarato/php-conventional-changelog: ^1.16
- meraki/test-suite: ^0.3.0
- narrowspark/http-emitter: ^2.0
- phpunit/phpunit: ^9.5
- psalm/plugin-phpunit: ^0.18.4
- ramsey/conventional-commits: ^1.3
- spatie/phpunit-watcher: ^1.23
- vimeo/psalm: ^5.1
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
目录。对于更高级的设置,请参阅文档,特别是配置部分。
注意事项
- 只有当有与子资源相同的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。