Laravel 返回 JSON 或视图

9
我正在开发一个API。如果用户使用.json作为后缀指定操作(例如admin/users.json),则返回JSON格式的响应,否则返回常规的HTML视图。
有些操作可能没有JSON响应,这种情况下将返回一个HTML视图。
是否有人能提供如何清晰实现此功能的建议?我希望可以通过路由来实现。
2个回答

4

我建议您将应用程序创建为API。

对于每个页面,您需要两个控制器。每个控制器使用不同的路由(在您的情况下,一个路由以.json结尾,另一个没有)。

json控制器以json格式返回数据。 "普通" 控制器调用相应的json路由,反序列化json,然后将生成的数组传递给视图。

这样,您就可以获得一个标准化的API(并且因为自己的应用程序使用它而得以维护),以及一个“正常”的网站。

更多信息: 使用自己的Laravel API

编辑:也许可以通过过滤器实现,但我现在没有时间尝试。


1
这听起来很合理,谢谢。看起来这也在laravel的github上讨论过:https://github.com/laravel/framework/issues/788 - user300285

3
在Laravel 5.x中,要实现发送数据到AJAX或JSON请求以及为其他请求返回视图模板的两个能力,您只需要检查$request->ajax()或$request->isJson()。
public function controllerMethod(Request $request)
{
   if ($request->ajax() || $request->isJson()) {
      //Get data from your Model or whatever
      return $data;
   } else {
      return view('myView.index');
   }
}

这似乎是处理API的JSON响应和HTML视图之间的好方法。但是,这是否是一个好的实践呢?对我来说感觉不太干净。 - Ru Chern Chong
1
很好,这很干净。它非常适用于需要重用现有控制器逻辑和前端路由的情况,以实现 SPA 类型的接口,并同时具备支持从服务器端呈现 Blade 模板视图的能力。否则你建议怎么做?为 AJAX 请求获取相同数据的业务逻辑添加新路由并复制吗? - Andy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接