自定义 Slim Not Found 处理程序取决于路线

Custom Slim Not Found Handler depending upon route

在 Slim 中,我们可以通过将它们分配给容器来创建自定义的未找到处理程序。

这很好,但我们需要能够根据当前路由组定义自定义处理程序。因此,例如,请考虑以下路由定义:

$app->group('/api', function() use ($app) {

});

$app->group('/', function() use ($app) {

});

使用 /api 组时,我们希望 Not Found 处理程序定义如下:

$container['notFoundHandler'] = function ($c)
{
    return function( $request, $response ) use ( $c )
    {
        return $response->withStatus(404)
                        ->withJSON([
                            'statusCode'  => 404,
                            'errorCode'   => 1001,
                            'description' => $c->get('errors')->get( 1001 ),
                            'timestamp'   => date('c')
                        ]);
    };
};

但是在使用基本路由 (/) 时,我们想使用不同的 HTML 处理程序。有人在 Slim 3 中根据路由组成功分配了不同的处理程序吗?

没有多个未找到处理程序的概念。它在容器中作为单一服务实现。

但是您的一个处理程序可以很好地包含逻辑。例如,本机 NotFound 处理程序为接受的内容类型执行不同的条件输出。

您的单个处理程序可以轻松检查 $request 中的任何必要上下文并相应地修改 return。