1

問題の概要

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 )で確認できます。

4

2 に答える 2

6

あなたの「リターン」が欠けています。あなたは常に「戻る」必要があります。

public function action_index()
{
    try
    {
        throw new Exception;    
    }
    catch(Exception $e)
    {
        return Response::error('500');
    }
}
于 2013-01-04T04:31:38.450 に答える
2

イベントを返すこともできます。これにより、今は同じことができますが、登録されているイベントを変更することで、1か所で動作を変更できます。

public function action_index()
{
    try
    {
        throw new Exception;    
    }
    catch(Exception $e)
    {
        return Event::first('500');
    }
}
于 2013-01-04T04:36:35.370 に答える