过滤以检测 Response::json 是否已发送

and*_*ber 1 response request filter laravel laravel-4

我有一个过滤器。我希望此过滤器仅在页面显示 HTML 时起作用,而不是在 json 或任何其他格式时起作用

App::after(function($request, $response)
{
    if( $request->getMethod() == 'GET' && $request->getRequestFormat() == 'html' ) {
        // do something!
    }
});
Run Code Online (Sandbox Code Playgroud)

在我的控制器函数中,我返回 json 数据:

return Response::json($data);
Run Code Online (Sandbox Code Playgroud)

但是,$request->getRequestFormat()仍然等于“html”,但它不应该等于。

我知道我可以将格式设置为“json”,如下所示:

Request::setRequestFormat('json');
return Response::json($data);
Run Code Online (Sandbox Code Playgroud)

但这似乎是多余的。如果我返回 aResponse::json它应该知道它是 json 而不是 HTML。我怎样才能检测到它是一个Response::json

And*_*eas 5

requestFormat 不是自动设置的 - 您可以通过编程方式提供它setRequestFormat,也可以通过包含 POST/GET 参数来提供它_format

如果你想检查请求是否是 JSON,你可以这样做$request->isJson(),但在我看来,你更像是在尝试检查响应是否JSON?在这种情况下你可以做$response instanceof Illuminate\Http\JsonResponse$response->headers->get('Content-Type') == 'application/json'