monii / nikic-fast-route-psr7-middleware
使用Nikita Popov的快速请求路由器(nikic/fast-route)的PSR-7路由中间件
Requires
- nikic/fast-route: ^0.6.0
- psr/http-message: ^1.0
Requires (Dev)
- phpunit/phpunit: ^4.8
- squizlabs/php_codesniffer: ^2.3
- zendframework/zend-diactoros: ^1.1
This package is not auto-updated.
Last update: 2016-12-03 15:06:44 UTC
README
基于nikic/fast-route构建的PSR-7路由中间件。
要求
- 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_FOUND
和Dispatcher::METHOD_NOT_ALLOWED
将导致返回带有状态代码404
和405
的提供的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配置了NikicFastRoute
和ActionHandler
使用相同的动作属性名称WebApp::DEFAULT_ACTION_ATTRIBUTE_NAME
。这确保了两个中间件能够在请求应该派发的动作主题上有效地进行通信。
许可
MIT,见LICENSE。
社区
想要参与其中?这里有几种方式
- 在irc.freenode.org的#monii IRC频道中找到我们。
- 在Twitter上提及@moniidev。