1

Kohana のエラー ハンドラを作成しています。、、などのアクションを持つコントローラーController_Errors( を継承する) があります。Controller_Kohana_Errorsaction_404action_403action_500

ルート:

Route::set('errors','errors/<action>', array (
        'action' => '[\d]{3}',
    ))
    ->defaults(array(
        'controller' => 'errors',
    ));

付属のサンプルbootstrap.php

try {
    $response = Request::factory()->execute();
} catch (Exception $e) {
    // If we are in development and the error wasn't a 404, show the stack trace.
    // Otherwise, show a nice error.
    if ((Kohana::$environment == KOHANA::DEVELOPMENT) AND ( ! ($e->getCode() == 404 OR $e->getCode() == 403))) {
        throw $e;
    }
    // Log the error
    Kohana::$log->add(Log::ERROR, Kohana_Exception::text($e));

    $error_code = 500;
    if ($e instanceof ReflectionException) {
        $error_code = 404;
    }
    if ($e instanceof HTTP_Exception)
    {
        $error_code = $e->getCode();
    }
    $request = Request::factory('errors/'.$error_code);
    if (*__NOT SURE WHAT GOES HERE__*) {
        $request = Request::factory('errors/500');
    }
    $response = $request->execute();
}

// Send the headers and echo the response
echo $response->send_headers()->body();

人々が私のクラスを拡張できるようにしたいので、アクションが存在するかどうかを確認し、存在しない場合は 500 エラーを表示するように変更する方法が必要です。( という行を参照してください*__NOT SURE WHAT GOES HERE__*。)

4

1 に答える 1

1

次のコードがそれを行うと思います:

if ($request->status == 404 && $error_code != 404) ...

この場合、404 は元の要求からのものではないことがわかっているため、エラー コードのエラー ページをロードしようとしたときに発生したに違いありません。

于 2012-05-08T17:27:04.787 に答える