Laravel 5.4 - 表单/API/视图
Posted
技术标签:
【中文标题】Laravel 5.4 - 表单/API/视图【英文标题】:Laravel 5.4 - form/API/view 【发布时间】:2017-09-01 21:09:49 【问题描述】:我创建了一个 API (store),它将数据保存在数据库中,如果成功则返回 201,否则返回 404。
if ($visit->save())
$visit->view_visit = [
'href' => 'api/v1/visit/' . $visit->id,
'method' => 'GET'
];
$response = [
'msg' => 'Visit created.',
'visit' => $visit
];
return response()->json($response, 201);
$response = [
'msg' => 'Error during creation.'
];
return response()->json($response, 404);
完美运行。使用邮递员可以看到状态为>。
这个 API 应该以两种方式使用:由另一个应用程序调用或由 Laravel 表单调用。这是问题:
如果成功,我该如何调用它,它将在浏览器上加载给定的视图? 换句话说,有没有办法让表单调用路由(api本身,比如../api/visit/)并且在成功的情况下加载另一个视图?另外,我想将 response['msg'] 的内容传递给这个新视图。
我知道我可以在 store 方法中通过过滤 HTTP 引用来做到这一点,但我想严格保留控制器代码以管理记录创建。除此之外,我必须将 201/404 代码与返回的数据一起发送。
我还考虑过创建另一个控制器来处理 API 响应然后调用表单,但听起来还是太过分了——我猜应该很简单。
【问题讨论】:
顺便说一句,正确的代码显示method' => 'POST
而不是method => 'GET
查看答案
看看laravel.com/docs/5.4/…
@Ross,谢谢!我按照 Sletheren 的建议做了,效果很好。
【参考方案1】:
在 laravel 中,您可以使用一个有用的方法来确定已发送的请求是 AJAX 请求还是普通请求,即:
$request->wantsJson()
所以,在你的控制器内部的 return 函数中,你会做一个 if 语句:
if ($request->wantsJson())
return response()->json();
else
return view(...);
【讨论】:
非常感谢,@Sletheren!完美运行 - (我知道它应该有一个优雅的解决方案!)。我刚刚将以下标头添加到 JSON 响应中,Laravel 发挥了魔力$visit->headers = [ 'Accept' => 'application/json', 'CONTENT_TYPE' => 'application/json' ];
以上是关于Laravel 5.4 - 表单/API/视图的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 5.4建站06--API 认证系统 Passport