0

カスタムページを追加しようとしています。私は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';

また、その解決策が好きではありません。

4

1 に答える 1