Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony FOSRestBundle操作订单_Php_Rest_Annotations_Symfony_Fosrestbundle - Fatal编程技术网

Php Symfony FOSRestBundle操作订单

Php Symfony FOSRestBundle操作订单,php,rest,annotations,symfony,fosrestbundle,Php,Rest,Annotations,Symfony,Fosrestbundle,我使用symfony3和FOSRestBundle开始了一个新的RESTAPI项目。一切正常,但我有个问题。我在控制器和路由器配置上有两个操作: api_marcas_get_all_marca_paginated get ANY/api/marca/{limit}/{page}.{u format} api\u marcas\u delete\u remove\u marca获取任何/api/marca/delete/{marcaid}.{u format} 问题是,当我(从邮递员那里)给这个

我使用symfony3和FOSRestBundle开始了一个新的RESTAPI项目。一切正常,但我有个问题。我在控制器和路由器配置上有两个操作:

api_marcas_get_all_marca_paginated get ANY/api/marca/{limit}/{page}.{u format}
api\u marcas\u delete\u remove\u marca获取任何/api/marca/delete/{marcaid}.{u format}

问题是,当我(从邮递员那里)给这个打电话时:

另一个动作(api_marcas_get_all_marca_paginated)响应

是的。。我知道我可以使用“删除”http方法,这是可行的。。。但是为什么会发生碰撞

以下是我的行动:

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

按那个命令

我做错了什么?
和行动顺序有关吗?谢谢…

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

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

您可以为
{limit}
定义一些要求,以便只匹配某些模式。在这里,您可以找到一些如何使用
需求
注释的示例:


另一方面,建议不要将
GET
方法用于更改应用程序状态的操作(如删除项目),因为这被认为是一种错误。

谢谢@dubrox的评论。您有什么建议来避免路线出现此类问题吗?我刚刚更新了我的答案,建议使用
requirements
属性来避免这种模式冲突。但是在您的特定情况下,您应该真正避免使用
GET
进行删除,如果您确实不想使用HTTP标准
DELETE
,至少应该使用
POST
方法。
 /**
 * @Rest\Get("/marca/{limit}/{page}")
 */
public function getAllMarcaPaginatedAction(Request $request)
{... code here ...}
 /**
 * @Rest\Get("/marca/delete/{marcaid}")
 */
public function deleteRemoveMarcaAction(Request $request)
{ ... //code here... }