我正在使用 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 路由的一个控制器路由”逻辑来解决这个问题。