【问题标题】:Displaying data returned from Laravel API resource in a view在视图中显示从 Laravel API 资源返回的数据
【发布时间】:2019-10-20 04:16:15
【问题描述】:

在 laravel 5.7 应用程序中,是否可以在控制器中创建 API 资源并在视图中显示结果?例如,如果我有这样的控制器

public function index()
{
    return BookResource::collection(Book::all());
}

我的 api.php 文件中的这条路线

Route::get('books', 'BookController@index');

当我向../api/books 发出获取请求时,我将能够在邮递员中查看所有书籍。

如果我想在向/books 发出获取请求时在视图中显示书籍,我该怎么做?这是我对如何去做的想法

  1. 在web.php中创建一个路由来获取books
  2. 从 BookController 中移除 api 资源并获取书籍列表
  3. 在api.php获取书籍路由中添加函数(函数内部返回书籍资源)
  4. 在视图中显示来自控制器的数据

这会是正确的方法吗?简单地把问题这样说,你将如何构建一个应用程序并公开它的 api?

【问题讨论】:

  • 您需要两条路由 - 一条返回包含 JS 的 html 视图,该 JS 将向返回数据响应的第二条(API 路由)发出请求。由于你最终会得到很多冗余命名的东西,比如“/books”和“/api/books”,laravel 现在构建了两个单独的路由文件以保持独立。路由的这种文件结构完全是任意的,您可以根据自己的意愿进行管理。如果您遇到困难并且需要帮助,坚持使用默认设置会有所帮助。 (这是评论,不是答案 b/c 我不知道这是否回答了问题)
  • 使用passport,很容易消费自己的api:laravel.com/docs/5.7/…

标签: php laravel laravel-5.7


【解决方案1】:

您不必删除路由,您可以保留apiweb 路由来访问您的Book 模型。

这样想:您的书籍存储在数据库中,您的 webapi 路由只是访问该数据库的两种不同方式,但它们可以(并且必须)存在单独的文件。

基本上你可以在web.php拥有

Route::resource('books', 'BooksController');

api.php

Route::resource('books', 'Api\BooksController');

【讨论】:

  • 我明白你的意思,但是如果我这样设置我的路线,我的控制器会是什么样子?通常,如果我正在构建一个简单的应用程序,那么控制器的 index 方法将类似于 return view('home', compact('books'))。使用 API 资源,索引方法将如下所示 return BookResource::collection(Book::all()) 现在如何将返回的数据传递给我的视图?
  • 如果您使用 API,则意味着您将接收 JSON 格式的数据(这是标准),并且您将在其他地方(如移动应用程序或命令行软件)使用它,所以您不需要没有看法。不清楚您想要实现什么,请更具体并描述您的方案。
猜你喜欢
  • 2020-05-28
  • 2020-10-06
  • 1970-01-01
  • 2019-11-24
  • 2022-07-26
  • 2018-11-30
  • 2023-01-08
  • 1970-01-01
  • 2019-12-01
相关资源
最近更新 更多