从内部控制器和twig访问rest API

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从内部控制器和twig访问rest API相关的知识,希望对你有一定的参考价值。

我通过api-platform制作了API,生成的url如下所示。 (我有Product实体)

/api/product?id=3

这个路由apiapi-platform生成。所以我不知道路由的名称。

现在,我想从twig文件和Controller访问此API。

1)在twig中,它应该如下所示,但我可以在哪里找到路由名称?

{{path('***')}}/product?id-3

2)在Controller中如何访问API?

有什么帮助吗?

我的环境是Symfony 4.1php 7.1

答案

您的api路由在Symfony中有一个名称,这是您应该在路径中使用的。您可以使用symfony提供的调试工具找到它,例如:

bin/console router:match "/api/product?id=3"

这应该告诉您哪条路线与路径匹配并显示名称,例如api_product_show。假设这是实际的路由名称,那么在您的模板中,您可以访问它,如:

{{ path('api_product_show', { 'id': 3 }) }}

您还可以使用其他命令获取应用程序中所有路由的列表,然后搜索正确的路由:

bin/console debug:router

它应该给你路线的名称和模式,但模式可能不像在路径上使用router:match那样容易辨别。

从控制器访问API可以通过多种方式完成。通常你需要一个HTTP客户端。有一个名为httplug的库,它将为您提供不同客户端的通用界面,如guzzle,buzz或curl。

您可以使用以下方法注入客户端或从容器中获取它:

$client = $this->container->get('httplug.client');

然后您可以发送请求并读出响应。请记住,您将收到JSON-payload,而不是实际的Product-object。您可以使用序列化程序从json数据创建对象,但它没有连接到您的ORM(Doctrine),如果您尝试保存它可能会产生奇怪的结果。

由于您使用的是自己的应用程序,因此您可能甚至不希望在控制器中浏览API,而是直接通过Doctrine使用实体。

以上是关于从内部控制器和twig访问rest API的主要内容,如果未能解决你的问题,请参考以下文章

REST API访问控制从访问令牌和路径参数中提取主题

API Gateway 中控制和管理对 REST API 的访问

如何从控制器访问 REST API 的所有可用路由?

RESTful API - 控制对 API 的访问(没有登录页面)

REST API 访问控制从访问令牌中提取主题与从路径参数中提取主题

iOS:如何从 REST SwiftUi 访问和使用 API 响应数据