klein.php 中的 onHttpError 每次都执行

onHttpError in klein.php executes every time

我用的是klein.php路由器,真的很强大,但是现在我想处理异常, 所以从文档中我正在使用这个函数

$klein->onHttpError(function ($code, $router,$matched,$method_matched,$http_exception) {
switch ($code) {
    case 404:
         $router->response()->body(
            '404 Page'
        );
        break;
    case 405:
        $router->response()->body(
            'You can\'t do that!'
        );
        break;
    default:
        $router->response()->body(
            'Oh no, a bad error happened that caused a '. $code
        );
 }
});

但是即使没有异常,这个函数也是在每一页的末尾渲染和打印404 page。 难道我做错了什么?我尝试检查 $matched 但没有成功。

我想在错误处理中使用 $service->render(),我该怎么做?因为服务无法访问,特别是 onHttpError 功能。

经过试验,我发现它是由于 skipRemaining() 函数而发生的。然后我又开始探索这些问题。问题 #285 提供了解决方案。

但我仍然没有找到使用 $service 对象调用在 onHttpError() 函数中呈现页面的方法。

编辑:

要访问 onHttpError() 中的 $service 对象,我们必须再次声明它。所以代码将是

$klein->onHttpError(function ($code, $router) {
    $service = $router->service();
    $service->render('your-page-url.php');
});