0

Laravel PHP フレームワークで作成されたアプリケーションがあります。私のメイン アプリケーションは、404 および 500 イベントをリッスンします。

Event::listen('404', function()
{
    return Response::error('404');
});

Event::listen('500', function()
{
    return Response::error('500');
});

これにより、カスタム エラー ページがユーザーに表示されます。しかし今、私はapiと呼ばれるバンドルにある API も構築しました。この API は Ajax 経由で使用されるため、別の方法でエラーを処理したいと考えています。そこで、これらのイベントを API バンドルの routes.php に追加しました。

Event::listen('404', function()
{
    return Response::json(array('status' => 'error', 'message' => 'API endpoint not found.'));
});

Event::listen('500', function()
{
    return Response::json(array('status' => 'error', 'message' => 'Internal server error'));
});

残念ながら、これは機能せず、依然として HTML エラー ページが表示されます。API またはメイン アプリケーションに応じて、404/500 エラーに異なる対応をするにはどうすればよいですか?

ありがとう!

4

3 に答える 3

1

バンドル内からメイン アプリケーション リスナーをオーバーライドしようとしましたか? これにより、バンドルが呼び出されたときにリスナーとしてそれらが削除され、イベントのバンドル リスナーのみが残ります。

Event::override()listen メソッドの代わりに メソッドを使用して、イベントをオーバーライドできます。

Event::override('404', function()
{
    return Response::json(array('status' => 'error', 'message' => 'API endpoint not found.'));
});
于 2012-10-25T05:50:31.573 に答える
1

routes.php で、イベント リスナーを次のように変更します。

Event::listen('404', function()
{
    if (URI::segment(1) == 'api') {
            return Response::json(array('status' => 'error', 'message' => 'API endpoint not found.'),404);
    }

    return Response::error('404');
});

__call catch-all のベース コントローラーに同様のものを追加する必要がある場合があります。

于 2012-11-14T16:49:34.893 に答える
0

API は、次のように Response を直接返すことができます。

return Response::make(json_encode($array), 404);

もちろん、これを独自の$yourApiController->error($data, $code)メソッドにカプセル化することもできます。

于 2012-10-24T20:26:20.933 に答える