在 Laravel 8 中使用 API 路由时返回错误
Posted
技术标签:
【中文标题】在 Laravel 8 中使用 API 路由时返回错误【英文标题】:return errors while using API routes in Laravel 8 【发布时间】:2021-09-21 22:20:46 【问题描述】:我正在构建一个小型应用程序来在数据库中存储联系人,我已经完成了 GET/POST 路由,并且工作正常,现在我在 API 路由上(为了使用 AJAX 调用)。如果 POST 请求中存在所有字段,我可以存储信息,但是,如果我想将消息发送回呼叫(以发送有关未存储联系人原因的反馈),则响应会将我发送到主路由www.myapp.com(没有消息)我想用“原因”发回一个 json。
此时我只验证 'nombre'、'correo'、'telefono' 是否有标准 Laravel 的请求验证方法的信息。
这是我的 LeadController
public function storeApi(Request $request)
$request -> validate([
'nombre' => 'required',
'correo' => 'required' ,
'telefono' => 'required'
]);
if(Lead::create($request->all()))
$result[] = ['saved' => true];
else
$result[] = ['saved' => false,
'reason' => 'Some data is missing'];
return response()-> json($result);
;
return response()-> json($result);
当记录被存储时,它确实会发回 Json 'saved' : true 但失败时它只会将您发送回'/'路由:www.myapp.com
如何将消息发送回 POST 调用?
【问题讨论】:
$request->validate()
在数据无效时执行重定向。请参阅此答案:***.com/a/52665249/3965631(和/或该页面上的其他答案)
谢谢,我刚刚意识到如果无效,它会引发异常,因为我没有任何 CATCH,它只会将我发送回主路线:'/' 谢谢
【参考方案1】:
经过进一步阅读,我只是更改了使用 Validator 类验证信息的方式:
public function storeApi(Request $request)
$validator = \Validator::make($request->all(), ['nombre' => 'required', 'correo' => 'required', 'telefono' => 'required']);
if($validator->fails())
return response()->json($validator->errors(), 422);
else
//ready to store
这样我不会让 ValidationException 异常在发送反馈到调用之前发生。
【讨论】:
【参考方案2】:因为$request->validate()
方法抛出\Illuminate\Validation\ValidationException 异常,所以它正在重定向回“/”。
有一些方法可以处理这个请求。
-
在您的验证代码周围放置 try catch 块
或者在 app\Exception\Handler.php 中处理这个期望,并以 JSON 格式返回响应。
【讨论】:
发生了这种情况,感谢您为我指出正确的方向,我只是使用不同的方法回答我自己的问题,但使用您刚刚写的评论。 如果您使用上述任何一种方法,您仍然可以使用您之前发布的原始代码。 哦,我明白了,这样我可以发送我自己的自定义消息,我错过了。如果我添加 Catch 块,我可以发送 json 响应? 是的,您可以尝试一下。基本上,当验证失败时,如果未在当前代码中处理,它将进入 Handler.php,因为这是所有未处理的异常所在。但是,如果你添加 try, catch 块,它将在当前代码中处理,不会进入 Handler.php 如果您建议的答案对您有用,您也可以在接受答案后关闭此问题..以上是关于在 Laravel 8 中使用 API 路由时返回错误的主要内容,如果未能解决你的问题,请参考以下文章
在 PHPUnit 中调用路由时如何在 Laravel 8 中模拟 Eloquent 模型