カスタムページを追加しようとしています。私はKohana 3.3を使用しています。hander
公式ドキュメントには、ネイティブKohana_Exception
クラスのメソッドを無視する必要があると記載されています。これはとても簡単なので、私はそれをしました。ここで、例外またはエラーが発生するたびに、Kohana がそのメソッドを呼び出すことを期待しています。しかし、そうではありません。クラスexecute_request
のメソッド内で例外がキャッチされる 2 つの catch ブロックが見つかりました。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);
}
だから私の質問は、例外と HTTP_Exception のカスタム エラー ページを持つようにすべてを設定するにはどうすればよいですか?
PS。HTTP_Exception_404 と HTTP_Exception_500 をオーバーライドしてカスタム エラー ページを表示することはできますが、これら 2 つで機能する可能性があるため、最適なオプションではないと思いますが、考えられるすべての HTTP_Exceptions をオーバーライドするのは適切な方法ではありません。
PS2。または、カスタム ビューをbootstrap.php
次のように設定できます。
Kohana_Exception::$error_view = 'custom_error.tpl';
また、その解決策が好きではありません。