【问题标题】:Laravel return json or viewLaravel 返回 json 或视图
【发布时间】:2023-03-20 12:32:01
【问题描述】:

我正在开发一个 API,如果用户以 .json 作为后缀(例如 admin/users.json)指定操作,他们会在 json 的返回中获得响应,否则他们会获得常规的 html 视图。

有些动作可能没有 json 响应,在这种情况下它们只会返回一个 html 视图。

有没有人对如何干净地实现这一点有建议?我希望它可以通过路由来实现。

【问题讨论】:

    标签: json api laravel laravel-4


    【解决方案1】:

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

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

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

    这样,您就有了一个可用的标准化 api(并得到维护,因为您自己的应用使用它),以及一个“正常”的网站。

    更多信息: Consuming my own Laravel API

    编辑:也许可以使用过滤器,但我不确定,我现在没有时间亲自尝试。

    【讨论】:

    【解决方案2】:

    在 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 的视图之间的好方法。但是,这甚至是一个好习惯吗?我觉得它不干净。
    • 嗯,很干净。它非常适合您需要从前端重用现有控制器逻辑和路由以实现类似 SPA 接口的场景,同时还具有支持从服务器端在 Blade 模板中呈现视图的能力。否则你有什么建议?添加新路由并复制业务逻辑以获取 AJAX 请求的相同数据?
    猜你喜欢
    • 2017-05-24
    • 2016-05-16
    • 1970-01-01
    • 2020-10-11
    • 2021-06-19
    • 2019-05-21
    • 1970-01-01
    • 1970-01-01
    • 2021-09-14
    相关资源
    最近更新 更多