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