我正在尝试从Laravel返回400状态代码。我已经在我的控制器中设置了一个简单的测试:
return Response::json(["Test", "Array"], 400);
看看网络检查器,我得到了 200 OK。
如果我转储响应:
object(IlluminateHttpJsonResponse)#306 (8) {
["data":protected]=>
string(16) "["Test","Array"]"
["callback":protected]=>
NULL
["headers"]=>
object(SymfonyComponentHttpFoundationResponseHeaderBag)#315 (5) {
["computedCacheControl":protected]=>
array(1) {
["no-cache"]=>
bool(true)
}
["cookies":protected]=>
array(0) {
}
["headerNames":protected]=>
array(3) {
["cache-control"]=>
string(13) "Cache-Control"
["date"]=>
string(4) "Date"
["content-type"]=>
string(12) "Content-Type"
}
["headers":protected]=>
array(3) {
["cache-control"]=>
array(1) {
[0]=>
string(8) "no-cache"
}
["date"]=>
array(1) {
[0]=>
string(29) "Wed, 02 Apr 2014 20:03:14 GMT"
}
["content-type"]=>
array(1) {
[0]=>
string(16) "application/json"
}
}
["cacheControl":protected]=>
array(0) {
}
}
["content":protected]=>
string(16) "["Test","Array"]"
["version":protected]=>
string(3) "1.0"
["statusCode":protected]=>
int(400)
["statusText":protected]=>
string(11) "Bad Request"
["charset":protected]=>
NULL
}
我可以看到状态代码设置为 400,状态文本为错误请求。
基本上我正在使用 Backbone.js 与 Laravel 结合使用,并且需要返回 200 以外的状态代码以捕获保存时的错误。
这似乎是一件简单的事情,有谁知道我遇到了这个问题吗?
更新
经过一番抨击,我找到了一个(不是很理想的)解决方法来实现我需要的东西,并在 Laravel GitHub 上记录了一个问题:https://github.com/laravel/laravel/issues/2796
基本上,我将控制器从等式中取出,并尝试将其作为路线:
Route::get('/bad-request', function() {
$response['state'] = "error";
$response['errors'] = ["name" => ["A product name is required"]];
return Response::json($response, 400);
});
同样的问题,返回 200。暂时找到这个解决方法:
Route::get('/bad-request', function() {
$response['state'] = "error";
$response['errors'] = ["name" => ["A product name is required"]];
http_response_code(400);
return Response::json($response, 400);
});
我宁愿用Laravel做这件事,而不是用PHP强迫它。我也尝试过Response::make
,这做了完全相同的事情。
我最近遇到了这个问题,它应该有效,但由于某种原因它没有。您需要自己创建响应对象。
Response::make(["Test", "Array"], 400);
由于某种原因,这仍然会自动将数组作为 JSON 返回......
我有用:
new Response(Array,400); //will return 400
尽管 API 会告诉您其他情况,但这不起作用:
new Response()->json(Array,400); // will return 200
new Response()->make(Array,400); // will return 200