middlewares/base-path-router

基于路径前缀的分层调度PSR-15中间件

v2.0.1 2020-12-02 00:05 UTC

This package is auto-updated.

Last update: 2024-08-29 04:43:12 UTC


README

Latest Version on Packagist Software License Testing Total Downloads

一个基于不同路径前缀将请求分发到其他中间件堆栈的中间件。

要求

安装

此软件包可以通过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 获取更多信息。