krak / mw-routing

Mw 框架的路由集成

v0.1.2 2016-07-20 10:08 UTC

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\routingInjectMwMw\Routing\invokeActionMw。这两个是执行路由并调用相应操作的部分。将它们分开成两部分非常有用,如果您想在两者之间运行中间件以进行额外处理。然而,有时您并不关心,可以使用 MwRoutingModulew,它同时执行路由注入和调用操作。

路由器

路由器是一个可调用的对象,它接收一个请求并返回是否找到路由。路由器可调用的有效响应有。

// on success
[200, $action, $params]

// on not found
[404]

// on not allowed
[405, $allowed_methods]

路由器基本上只是找到要使用的处理程序和任何参数。

InvokeAction

操作调用者是一个可调用的对象,它接收请求、操作和参数并执行操作。 $action 可以是特定操作调用者知道的一切。您可以使用几种操作调用者。

  • callableActionCaller
  • pimpleInvokeAction

错误处理器

错误处理器用于处理路由错误,用于 404 或 405 响应。它接受请求和错误数据,并简单地返回适当的响应。