【发布时间】:2019-09-15 11:03:35
【问题描述】:
我理解在允许类似可访问的路线时,路线的顺序很重要。
我感到困惑的是,为什么在向该路由提交DELETE 请求时,它是否与GET 路由匹配,而不是忽略它并尝试它下面的匹配方法?
/**
* @Route("/{game}")
* @Method({"GET"})
*/
public function single(Request $request, GameSerializer $gameSerializer, Game $game) {
$out = $gameSerializer->bind($game);
return new JsonResponse($out);
}
/**
* @Route("/{game}")
* @Method({"DELETE"})
*/
public function remove(Request $request, Game $game) {
$em = $this->getDoctrine()->getManager();
$em->remove($game);
$em->flush();
return new JsonResponse([], 200);
}
全面披露
我明白为什么它会根据严格的模式匹配最上面的路线
我不理解为什么这样做时访问方法会被忽略
所以,为了测试,我调整以将基于 DELETE 的路由向上移动到 GET 路由上方
/**
* @Route("/{game}")
* @Method({"DELETE"})
*/
public function remove(Request $request, Game $game) {
$em = $this->getDoctrine()->getManager();
$em->remove($game);
$em->flush();
return new JsonResponse([], 200);
}
/**
* @Route("/{game}")
* @Method({"GET"})
*/
public function single(Request $request, GameSerializer $gameSerializer, Game $game) {
$out = $gameSerializer->bind($game);
return new JsonResponse($out);
}
只有.. 当我尝试通过在浏览器中执行访问 url 的基本操作来获取现有的非测试记录时发生这种情况(所以,GET)
天啊,它有没有删除过那条记录。
为什么访问方法被忽略了?
【问题讨论】:
-
您使用的是哪个版本的 Symfony?更重要的是哪个版本的 SensioFrameworkExtraBundle ?来自 SensioFrameworkExtraBundle 的 @Method 注释已在最新版本中删除
标签: symfony symfony4 symfony-routing