monii/nikic-fast-route-psr7-middleware

此包已被废弃,不再维护。未建议替代包。

使用Nikita Popov的快速请求路由器(nikic/fast-route)的PSR-7路由中间件

dev-master / 0.0.x-dev 2015-11-16 12:07 UTC

This package is not auto-updated.

Last update: 2016-12-03 15:06:44 UTC


README

基于nikic/fast-route构建的PSR-7路由中间件。

Latest Stable Version Total Downloads Latest Unstable Version License
Build Status

要求

  • PHP 5.5+

安装

$> composer require monii/nikic-fast-route-psr7-middleware

在发布稳定版本之前或如果更愿意使用开发版本,请使用

$> composer require monii/nikic-fast-route-psr7-middleware:@dev

使用

实例化

实例化NikicFastRoute需要提供一个FastRoute\Dispatcher实例。还可以指定可选的动作属性名称和参数属性名称。动作属性名称和参数属性名称的默认值可以在NikicFastRoute::DEFAULT_ACTION_ATTRIBUTE_NAME("monii/nikic-fast-route:action")和NikicFastRoute::DEFAULT_PARAMETERS_ATTRIBUTE_NAME("monii/nikic-fast-route:parameters")中找到。

NikicFastRoute之后执行的中间件将能够检查这些请求属性,以确定应使用哪些动作和参数来分发请求。

调用

调用时,NikicFastRoute将检查PSR-7 ServerRequestInterface,并将请求的相关信息传递给FastRoute\Dispatcher实例以dispatch请求。

分发器错误条件Dispatcher::NOT_FOUNDDispatcher::METHOD_NOT_ALLOWED将导致返回带有状态代码404405的提供的PSR-7 ResponseInterface

分发器条件Dispatcher::FOUND将导致分发动作被添加到配置的动作属性中,而分发参数将被添加到配置的参数属性中。将返回修改后的$request(使用修改后的$request和原始的$response调用)和原始$response的响应值。

如果由于某种原因从Dispatcher返回了其他任何条件(不清楚这是否可能),则将返回带有状态代码500的提供的$response

消耗

NikicFastRoute管理的请求的消费者可以检查请求的属性,以确定如何处理请求。处理分发动作的责任可以落在框架、应用程序或另一个中间件上。

消耗NikicFastRoute的中间件的示例是monii/action-handler-psr7-middleware。虽然此中间件默认配置为查看不同的动作属性名称,但它可以很容易地配置为使用与该中间件相同的名称。相反,monii/nikic-fast-route-psr7-middleware本身也可以配置为使用与monii/action-handler-psr7-middleware相同的名称。

在框架的情况下,中间件都可以配置为使用一组完全不同的名称。一个这样做的是Nimble框架。Nimble有意配置这两个中间件使用其自己的动作属性名称。

示例

通过查看Nimble当前的工作方式,可以看到如何使用此中间件与其他中间件结合使用。Nimble利用Relay作为其中间件调度器,并利用Laravel的容器进行依赖注入和服务定位。

$container->bind(Relay::class, function (Container $container) {
    /** @var RelayBuilder $relayBuilder */
    $relayBuilder = $container->make(RelayBuilder::class);

    $queue = array_merge(
        [
            $container->make(NikicFastRoute::class, [
                'actionAttributeName' => WebApp::ACTION_ATTRIBUTE_NAME,
                'parametersAttributeName' => WebApp::PARAMETERS_ATTRIBUTE_NAME,
            ]),
        ],
        $container->tagged('middleware.error_handler'),
        $container->tagged('middleware.early'),
        $container->tagged('middleware'),
        $container->tagged('middleware.late'),
        [
            $container->make(ActionHandler::class, [
                'actionAttributeName' => WebApp::ACTION_ATTRIBUTE_NAME,
            ]),
        ]
    );

    return $relayBuilder->newInstance($queue);
});

如图所示,Nimble配置了NikicFastRouteActionHandler使用相同的动作属性名称WebApp::DEFAULT_ACTION_ATTRIBUTE_NAME。这确保了两个中间件能够在请求应该派发的动作主题上有效地进行通信。

许可

MIT,见LICENSE。

社区

想要参与其中?这里有几种方式

  • 在irc.freenode.org的#monii IRC频道中找到我们。
  • 在Twitter上提及@moniidev