問題の概要
Response :: error( '500')を使用してLaravelに500のデフォルトエラーページ(views / error / 500.php)をレンダリングさせることができません。
再現するコード(この例では簡略化)
ダミーコントローラーを作成し、次のパブリックメソッドを追加します。
public function action_index()
{
try
{
throw new Exception;
}
catch(Exception $e)
{
Response::error('500');
}
}
このルートを実行すると、空白の白いページが表示され、ヘッダーのステータスが500ではなく200になっていることに注意してください。
期待される結果
views / error / 500.phpのデフォルトの500エラーページがレンダリングされ、残りのスクリプト(より長いスクリプトを想定)の実行が停止されることを期待しています。
実際の結果
ヘッダーステータスが200の空白の白いページがブラウザに送信されます。
私の環境
- Laravel 3.2.12
- 共有ホスト上のPHP5.3.13
- Windows 7
- Chrome 23(他のさまざまなブラウザでも同じ結果)
詳しくは
この問題を少し理解しやすくしたり、トラブルシューティングしたりするために提供できるものは他にありますか。同様の(同一?)問題がLaravelフォーラム(http://forums.laravel.io/viewtopic.php?id=2191)で発生し、しばらく前に修正されたと述べられました。
application / routers.phpには、500エラーハンドラー用の次のコードがあります。
Event::listen('500', function()
{
return Response::error('500');
});
Responseオブジェクトのソースコードは、GitHub(https://github.com/laravel/laravel/blob/master/laravel/response.php )で確認できます。