krak / mw-routing
Mw 框架的路由集成
v0.1.2
2016-07-20 10:08 UTC
Requires (Dev)
- guzzlehttp/psr7: ^1.3
- nikic/fast-route: ^1.0
- peridot-php/peridot: ^1.18
- pimple/pimple: ^3.0
This package is auto-updated.
Last update: 2024-09-11 14:56:07 UTC
README
MW Routing 组件提供了一个路由中间件,用于注册到中间件集合中。
routingMw
简单地匹配请求,执行操作,并返回响应。这是通过路由器、InvokeAction 和 ErrorHandler 来实现的。
基本用法
这将向您展示如何配置 RESTful API 的路由。
<?php
use Krak\Mw;
function error($code, $msg) {
return ['code' => $code, 'message' => $msg];
}
function apiRoutes($r) {
// define the routes
}
$rf = mw\jsonResponseFactory($rf, JSON_PRETTY_PRINT);
$app = new Pimple\Container();
$invoke = mw\routing\callableInvokeAction();
$invoke = mw\routing\pimpleInvokeAction($invoke, $app, 'namespace.prefix.');
$invoke = mw\routing\responseMarshalInvokeAction($invoke, function($tup) use ($app, $rf) {
list($status, $data) = $tup;
return $rf($status, [], $data);
});
return mw\compose([
mw\catchException(function($req, $e) use ($rf) {
return $rf(500, [], error('unhandled_exception', $e->getMessage(), [
'exception' => $e,
]));
}),
mw\routing\routingInjectMw(
mw\routing\fastRouteRouter(FastRoute\simpleDispatcher(function($r) {
return apiRoutes($r); // function that defines the routes
})),
function($tup) use ($rf) {
return $rf(404, [], error('endpoint_not_found', 'Endpoint does not exist with method'));
}
),
// put any additional middleware between the routingInject and invokeAction to do any processing of the routing parameters
mw\routing\invokeActionMw($invoke),
]);
关键点在于我们如何使用 Mw\Routing\routingInjectMw
和 Mw\Routing\invokeActionMw
。这两个是执行路由并调用相应操作的部分。将它们分开成两部分非常有用,如果您想在两者之间运行中间件以进行额外处理。然而,有时您并不关心,可以使用 MwRoutingModulew
,它同时执行路由注入和调用操作。
路由器
路由器是一个可调用的对象,它接收一个请求并返回是否找到路由。路由器可调用的有效响应有。
// on success
[200, $action, $params]
// on not found
[404]
// on not allowed
[405, $allowed_methods]
路由器基本上只是找到要使用的处理程序和任何参数。
InvokeAction
操作调用者是一个可调用的对象,它接收请求、操作和参数并执行操作。 $action
可以是特定操作调用者知道的一切。您可以使用几种操作调用者。
- callableActionCaller
- pimpleInvokeAction
错误处理器
错误处理器用于处理路由错误,用于 404 或 405 响应。它接受请求和错误数据,并简单地返回适当的响应。