如何在服务器端渲染中使用 API 平台?

问题描述 投票:0回答:0

我正在使用 https://github.com/Limenius/ReactBundle 向 React 应用程序添加 SSR 支持。

对于 React 应用程序的每个路由(通过

react-router-dom
),我在后端应用程序上创建一个匹配的路由和控制器端点。它适用于在用户交互之前不使用任何 API 平台端点的页面(因此服务器端渲染不需要任何 api 数据)。

但我也有页面显示来自 API 平台的数据,例如带有分页和搜索输入的

Book
条目列表,在分页或搜索输入更改时查询
api/books
端点。 这些页面之一的后端控制器端点如何获取列表?有没有办法从控制器调用 API 平台端点?

我期待某种内置服务,我可以将

Request $request
对象传递给它,它会返回与直接通过 HTTP 调用 api 时相同的数据。但是我没有找到这样的服务。

API 平台有这样的功能吗? 或者我是否必须通过在支持分页和搜索输入的

BookRepository
中手动创建查询生成器方法来“复制”api 端点行为?我希望不会,它看起来不太可维护也不实用。

看了API Platform源码,只发现这两个方法,不太合适:

  • ApiPlatform\Core\Api\IriConverterInterface::getItemFromIri('api/books/28')
    :只能用于获取一个条目(通过ID查找)。
  • ApiPlatform\Core\DataProvider\CollectionDataProviderInterface::getCollection(Book::class, 'GET')
    :等同于 Doctrine 的
    findAll()
    ,所以没有过滤器支持。

当您通过 HTTP 进行 API 调用时,它会通过

src/Symfony/EventListener/ReadListener.php
但此侦听器并非设计为从控制器调用。它所依赖的逻辑相同,例如
ApiPlatform\Util\RequestParser
,它被标记为
@internal
.

也许我以错误的方式接近整个 SSR 的东西?我几乎找不到关于这个主题的任何资源(SSR with Symfony 和 React),所以我有点想通过这个“一个 React 路由的一个控制器路由”逻辑来解决这个问题。

php reactjs symfony server-side-rendering api-platform.com
© www.soinside.com 2019 - 2024. All rights reserved.