2010-12-05 6 views
1

Need assistance with Kohana 3 and catch all route turning into a 404 errorここでの回答として、Kohanaがスローしたエラーをキャッチして、かなりのエラーページを表示し、正しいHTTPコードを送信しようとしています。実行中のKohana_Request_Exceptionをキャッチ中 - 予期しない動作

は、ここで問題を実証するための簡易版です。

try { 
    // Instantiate your Request object 
    $request = Request::instance(); 
    // The give it a try, to see if its a valid request 
    $request->execute(); 
} 
catch (Kohana_Request_Exception $e) { 
    header('Content-Type: text/html; charset='.Kohana::$charset, TRUE, 404); 
    echo Request::factory('err/404')->send_headers()->execute()->response; 
    exit; 
} 
echo $request->send_headers()->response; 

だから私は、このようなhttp://example.local/moo/など存在しないURLに移動し、私はここで、以下の応答

Kohana_Request_Exception [ 0 ]: Unable to find a route to match the URI: moo 

を得るhappening-何です - リクエストが試行されていますが、Kohana_Request_Exceptionで失敗しました。がキャッチされています。ですが、新しいリクエストオブジェクトを作成しようとすると、Request::factory('err/404')そのリクエストはエラーfをスローしますROMの私の最初の要求....!? wtf ??

私は良い一時間それを手抜きして、私が始めたときに困惑しています。工場からの新しい要求は、古い要求の知識を持っていないはずですか?なぜ私は本質的にd00dの答えからそれをコピーしたときにこのコードが誤動作していますか?

// Release version and codename 
const VERSION = '3.0.7'; 
const CODENAME = 'hattrick'; 

誰かが正しい方向に私を指しています。

+0

'header()'を直接呼び出さないでください。これは 'Request :: send_headers()'によって上書きされます。代わりに 'Request-> headers []'と 'Request-> status'を使用してください。 – shadowhand

答えて

0

なるほど!ありがとうございました。しかし、私はそれを考えました。私はちょっとスタックトレースを見てみました。エラーページのテンプレートコントローラのbefore()メソッドは、それがRequest::current()に変更された認証チェックを試行していたので、新しいエラーを投げていました。 。

ありがとうございました!

0

Request::factory('err/404')内にあるerr/404の部分は、あなたのルートでも一致するようにしようとしているからです。それは今までにマッチします、つまりあなたはこのようなものでルートを持っている...

Route::set('errors', 'err/<action>', array('action' => '404|500')) {} 

あなたはまた、404を経由して送信されなければならない...

$request->status = 404; 
関連する問題