从控制器内部和 twig 访问 rest API
Access rest API from inside controller and from twig
我用api-platform做了API,生成的url如下图。
(我有 Product
个实体)
/api/product?id=3
此路由 api
由 api-platform
生成。
所以我不知道路由的名称。
现在,我想从 twig 文件和控制器访问这个 API。
1)
在twig中,应该是下面这样的,但是路由名称在哪找呢??
{{path('***')}}/product?id-3
2) 在 Controller 中如何访问 API??
有什么帮助吗??
我的环境是Symfony 4.1
、php 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.
使用实体
我用api-platform做了API,生成的url如下图。
(我有 Product
个实体)
/api/product?id=3
此路由 api
由 api-platform
生成。
所以我不知道路由的名称。
现在,我想从 twig 文件和控制器访问这个 API。
1) 在twig中,应该是下面这样的,但是路由名称在哪找呢??
{{path('***')}}/product?id-3
2) 在 Controller 中如何访问 API??
有什么帮助吗??
我的环境是Symfony 4.1
、php 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.
使用实体