Symfony FOSRestBundle 操作顺序

Symfony FOSRestBundle Actions Order

我开始使用 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}

问题是当我调用这个(来自 Postman)时:

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... }

按照这个顺序。

我做错了什么? 跟动作顺序有关系吗?谢谢...

发生这种情况是因为这些规则是按顺序考虑的,并且采用了第一个匹配项。

在您的示例中 /api/marca/delete/105 第一个规则匹配 delete 成为 {limit}105 成为 {page}.

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

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