我正在尝试添加我的自定义页面。我正在使用 Kohana 3.3。官方文档指出我应该覆盖本hander
机Kohana_Exception
类的方法。这很容易做到,所以我做到了。现在我希望 Kohana 每次发生异常或错误时都会调用该方法。但这种情况并非如此。我发现了 2 个 catch 块,其中在类的execute_request
方法中捕获了一个异常Kohana_Request_Client_Internal
。
第一次捕获
catch (HTTP_Exception $e)
{
// Get the response via the Exception
$response = $e->get_response();
}
第二次捕获
catch (Exception $e)
{
// Generate an appropriate Response object
$response = Kohana_Exception::_handler($e);
}
如您所见,没有一个 catch 块调用handler
我覆盖的方法。
设置您自己的异常处理程序set_exception_handler
没有任何效果,因为它仅适用于未捕获的异常,并且类似的异常404
会被抛出和捕获。
不过,运行时错误没有问题。该块捕获它们并显式调用覆盖handler
的方法。
if (Kohana::$errors AND $error = error_get_last() AND in_array($error['type'],
Kohana::$shutdown_errors))
{
// Clean the output buffer
ob_get_level() AND ob_clean();
// Fake an exception for nice debugging
Kohana_Exception::handler(new ErrorException($error['message'], $error['type'], 0, $error['file'], $error['line']));
// Shutdown now to avoid a "death loop"
exit(1);
}
所以我的问题是如何设置所有内容以具有 Exception 和 HTTP_Exception 的自定义错误页面?
PS。我可以覆盖 HTTP_Exception_404 和 HTTP_Exception_500 以显示我的自定义错误页面,但我认为这不是最好的选择,因为它适用于这两个,但覆盖所有可能的 HTTP_Exceptions 并不是一个好方法。
PS2。或者我可以设置我的自定义视图bootstrap.php
:
Kohana_Exception::$error_view = 'custom_error.tpl';
也不喜欢那个解决方案。