Symfony FOSRestBundle操作订单

时间:2016-11-19 03:03:29

标签: php rest annotations symfony fosrestbundle

我开始使用symfony3和FOSRestBundle为REST API启动新的项目。一切都按预期工作,但我有一个问题。我在我的控制器和路由器配置上有这两个动作:

api_marcas_get_all_marca_paginated GET ANY ANY /api/marca/{limit}/{page}.{_format} api_marcas_delete_remove_marca GET ANY ANY /api/marca/delete/{marcaid}.{_format}

问题是当我打电话给这个时(来自邮递员):

127.0.0.1:8000/api/marca/delete/105

另一个动作(api_marcas_get_all_marca_paginated)响应......

是的..我知道我可以使用“DELETE”http方法,这是有效的......但......为什么它们会发生碰撞?

以下是我的行动:

 /**
 * @Rest\Get("/marca/{limit}/{page}")
 */
public function getAllMarcaPaginatedAction(Request $request)
{... code here ...}

 /**
 * @Rest\Get("/marca/delete/{marcaid}")
 */
public function deleteRemoveMarcaAction(Request $request)
{ ... //code here... }

在那个订单上。

我做错了什么? 与行动的顺序有什么关系?感谢...

1 个答案:

答案 0 :(得分:1)

之所以会发生这种情况,是因为这些规则是按顺序考虑的,并且会进行第一次匹配。

在您的示例/api/marca/delete/105中,第一条规则与delete匹配为{limit}105{page}匹配。

您可以为{limit}定义一些要求,以便仅匹配某些模式。您可以在此处找到有关如何使用requirements注释的一些示例:http://symfony.com/doc/current/bundles/FOSRestBundle/param_fetcher_listener.html

另一方面,建议不要将GET方法用于改变应用程序状态的操作(如删除项目),将其视为safe method