我正在创建一个简单的API,用于从移动应用上传文件。
在我的routes/api.php
文件中,我定义了一条路线:
Route::post("/file", 'UploadController@upload');
然后在我的控制器中验证请求:
public function upload(Request $request){
$this->validate($request, [
'name' => 'required',
'file' => 'file',
'type' => 'required|in:sign,photo',
]);
// do something here....
}
当请求正确时(它通过验证)一切正常,Laravel返回JSON响应。
但是如果请求未通过验证,即缺少name
字段,Laravel将返回302页面并尝试将我重定向到登录页面。
如果验证失败,如何使用JSON消息返回正确的40X / 50X错误,而不是302重定向页面?
我正在使用Laravel 5.3和Insomnia来测试API调用。
答案 0 :(得分:5)
validate
方法返回正常请求的重定向,以及AJAX请求的JSON。
validate方法接受传入的HTTP请求和一组验证规则。如果验证规则通过,您的代码将继续正常执行;但是,如果验证失败,将抛出异常并将自动将正确的错误响应发送回用户。对于传统的HTTP请求,将生成重定向响应,同时将为AJAX请求发送JSON响应。
所以你有几个选择,这里有几个:
X-Requested-With
标头,以便Laravel认为这是一个AJAX请求fails()
并按照您希望的方式处理您的回复:$validator = Validator::make($input, $rules);
if ($validator->fails()) {
// Custom Response
}
如果您只是制作API,则可能需要考虑使用Lumen,因为它针对特定目的进行了更精细的调整。此外,还有它的验证defaults to returning a JSON response。