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

Laravel 5.4 和数据表 - Ajax - 保存/发布数据 - 服务器端

表单数据为空 - laravel 5.4

Laravel 5.4 表单请求唯一验证:如何访问 id?

在 Laravel 5.4 中创建表单的最佳方法是啥?

Laravel 5.4 如何通过表单请求为用户分配角色?