2015-08-07 2 views
1

Я использую klein.php маршрутизатор, который является действительно мощным, но сейчас я хочу, чтобы обрабатывать исключения, так из документаций Я использую эту функциюonHttpError в 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.

ответ

0

После эксперимента, я обнаружил, что он происходит из-за функции skipRemaining(). Затем я снова начал изучать проблемы. Выпуск #285 предоставил решение.

Но все же я не нашел, чтобы сделать страницу в onHttpError() функцией, используя $service вызов объекта.

Edit:

$service Чтобы получить доступ к объекту в onHttpError(), мы должны объявить его снова. Таким образом, код будет

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