middlewares / base-path-router
基于路径前缀的分层调度PSR-15中间件
v2.0.1
2020-12-02 00:05 UTC
Requires
- php: ^7.2 || ^8.0
- middlewares/utils: ^3.0
- psr/http-server-middleware: ^1.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.0
- laminas/laminas-diactoros: ^2.3
- oscarotero/php-cs-fixer-config: ^1.0
- phpstan/phpstan: ^0.12
- phpunit/phpunit: ^8|^9
- squizlabs/php_codesniffer: ^3.0
README
一个基于不同路径前缀将请求分发到其他中间件堆栈的中间件。
要求
- PHP >= 7.2
- PSR-7 http 库
- PSR-15 中间件分发器
安装
此软件包可以通过Composer以 middlewares/base-path-router 的方式安装和自动加载。
composer require middlewares/base-path-router
您可能还希望安装 middlewares/request-handler。
示例
此示例使用 middleware/request-handler 来执行路由处理程序
$dispatcher = new Dispatcher([ new Middlewares\BasePathRouter([ '/admin' => $admin, '/admin/login' => $adminLogin, '/blog' => $blog, ]), new Middlewares\RequestHandler() ]); $response = $dispatcher->dispatch(new ServerRequest());
BasePathRouter 允许将任何内容定义为路由处理程序(闭包、回调、动作对象、控制器类等)。中间件将此处理程序存储在请求属性中。
使用方法
您必须设置一个路径数组(作为键)和处理程序(作为值)。
$router = new Middlewares\BasePathRouter([ '/foo' => $routerFoo, '/bar' => $routerBar, '/foo/bar' => $routerFooBar, ]);
可选地,您可以提供 Psr\Http\Message\ResponseFactoryInterface
作为第二个参数,以创建路由未找到的错误响应(例如 404
)。如果未定义,则使用 Middleware\Utils\Factory 自动检测。
$responseFactory = new MyOwnResponseFactory(); $router = new Middlewares\BasePathRouter($paths, $responseFactory);
continueOnError
将 true
设置为继续到下一个中间件,而不是为不匹配的请求返回空的404响应(即没有以提供的任何前缀开始的URI路径的请求)。
stripPrefix
默认情况下,后续中间件将接收到稍微修改过的请求对象:任何匹配的路径前缀将从URI中删除。这在您有一个分层设置的路由器时很有用,其中后续路由器(例如在 /api
端点挂载的API堆栈的路由器)可以忽略公共前缀。
如果您想禁用此行为,请使用 stripPrefix
方法
$router = (new Middlewares\BasePathRouter([ '/prefix1' => $middleware1, ]))->stripPrefix(false);
attribute
用于在服务器请求中存储处理程序的属性名称。默认属性名称为 request-handler
。
$dispatcher = new Dispatcher([ //Save the route handler in an attribute called "route" (new Middlewares\BasePathRouter($paths))->attribute('route'), //Execute the route handler (new Middlewares\RequestHandler())->attribute('route') ]);
请参阅 CHANGELOG 获取有关最近更改的更多信息,以及有关 CONTRIBUTING 的贡献详情。
MIT许可(MIT)。请参阅 LICENSE 获取更多信息。