middlewares / fast-route
使用 FastRoute 的中间件
v2.0.1
2020-12-02 00:05 UTC
Requires
- php: ^7.2 || ^8.0
- middlewares/utils: ^3.0
- nikic/fast-route: ^1.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
用于处理发现中间件的 FastRoute。
需求
- PHP >= 7.2
- 一个 PSR-7 http 库
- 一个 PSR-15 中间件分发器
安装
此包可以通过 Composer 以 middlewares/fast-route 的方式安装和自动加载。
composer require middlewares/fast-route
您可能还需要安装 middlewares/request-handler。
示例
此示例使用 middlewares/request-handler 来执行路由处理程序
//Create the router dispatcher $dispatcher = FastRoute\simpleDispatcher(function (FastRoute\RouteCollector $r) { $r->addRoute('GET', '/hello/{name}', function ($request) { //The route parameters are stored as attributes $name = $request->getAttribute('name'); //You can echo the output (it will be captured and written into the body) echo sprintf('Hello %s', $name); //Or return a string return sprintf('Hello %s', $name); //Or return a response return new Response(); }); }); $dispatcher = new Dispatcher([ new Middlewares\FastRoute($dispatcher), new Middlewares\RequestHandler() ]); $response = $dispatcher->dispatch(new ServerRequest('/hello/world'));
FastRoute 允许将任何内容定义为路由处理程序(闭包、回调、动作对象、控制器类等)。中间件将此处理程序存储在请求属性中。
用法
使用 FastRoute\Dispatcher
实例创建中间件
$route = new Middlewares\FastRoute($dispatcher);
可选地,您可以提供一个 Psr\Http\Message\ResponseFactoryInterface
作为第二个参数,该参数将用于创建错误响应(404 或 405)。如果未定义,Middleware\Utils\Factory 将自动检测。
$responseFactory = new MyOwnResponseFactory(); $route = new Middlewares\FastRoute($dispatcher, $responseFactory);
属性
更改用于在服务器请求中存储处理程序的属性名称。默认名称为 request-handler
。
$dispatcher = new Dispatcher([ //Save the route handler in an attribute called "route" (new Middlewares\FastRoute($dispatcher))->attribute('route'), //Execute the route handler (new Middlewares\RequestHandler())->handlerAttribute('route') ]);
有关最近更改的更多信息,请参阅 CHANGELOG,有关贡献细节,请参阅 CONTRIBUTING。
MIT 许可证 (MIT)。有关更多信息,请参阅 LICENSE。