每次都会执行klein.php中的onHttpError

时间:2015-08-07 07:08:16

标签: php exception-handling router klein-mvc

我正在使用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函数无法访问服务。

1 个答案:

答案 0 :(得分:0)

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

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

编辑:

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

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