我通过api-platform制作了API,生成的网址如下所示。
(我有Product
个实体)
/api/product?id=3
此路由api
由api-platform
生成。
所以我不知道路由的名称。
现在,我想从树枝文件和Controller中访问此API。
1) 在树枝上,应该像下面这样,但是在哪里可以找到路由名称?
{{path('***')}}/product?id-3
2)在Controller中如何访问API?
有什么帮助吗?
我的环境是Symfony 4.1
,php 7.1
答案 0 :(得分:2)
您的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
的库,它将为您提供针对不同客户端(如狂饮,嗡嗡声或卷曲)的通用界面。
您只需使用以下方法注入客户端或从容器中获取客户端即可:
$client = $this->container->get('httplug.client');
然后,您可以发送请求并读出响应。请记住,您将收到JSON有效载荷,而不是实际的Product-object。您可以使用序列化程序从json数据创建对象,但是它没有连接到您的ORM(Doctrine),并且如果尝试保存它,可能会产生奇怪的结果。
由于您使用自己的应用程序,因此您甚至可能不想通过控制器中的API,而是直接通过Doctrine使用Entity。