1
私はコハナのエラーハンドラを作成しています。 アクションがコハナに存在するかどうかを確認します
が含ま
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();
:action_404
様作用、action_403
、action_500
とコントローラController_Errors
(Controller_Kohana_Errors
を継承)、等
ルートがあります私は人々が私のクラスを拡張することを許可したいので、私は何かの方法が必要ですアクションが存在する場合はck、存在しない場合は500エラーを表示するように変更します。 (*__NOT SURE WHAT GOES HERE__*
を言う行を参照してください。)
これは、要求を実行する別のtry/catch内にあることが必要です。それは最も効率的な方法のようには見えません。 – yakatz
なぜ別のtry/catchの中にいなければならないのでしょうか?このうちどれが別の例外をスローしていますか? –
'$ request = Request :: factory( 'errors /' .$ error_code);'はステータスを設定しません。最初に 'execute()'を呼び出す必要があり、例外がスローされます。 – yakatz