php Symfony路由API问题

3gtaxfhh  于 2022-12-02  发布在  PHP
关注(0)|答案(1)|浏览(150)

我正在编写一个API来提高我的个人PHP技能。我有两个问题:

recette.recetteById:
   path: /api/recette/{id}
   controller: App\Controller\RecetteController::recetteById

recette.subRecette:
  path: /api/recette/sub-recette
  controller: App\Controller\RecetteController::subRecette

当我转到/api/recette/sub-recette时,它显示的是recetteById函数的返回值,而不是subRecette,看起来/sub-recette被用作/{id}
我的recetteById只是一个返回id为json的函数,所以当我转到/api/recette/sub-recette时,它显示sub-recette。为什么路由不调用我的subRecette函数?
当我转到/api/recette/sub-recette时,我必须做些什么来调用subRecette函数
按ID重新设置:

public function recetteById($id) {
  return $this->json($id);
}
yc0p9oo0

yc0p9oo01#

在编辑问题并更仔细地阅读之后,我明白了问题是什么。
路由的工作原理是先匹配者获胜,对它来说,sub-recette看起来很像一个完全有效的ID。
为了避免这种情况,如果您的ID是数字,您可以执行以下操作:

recette.recetteById:
    path: /api/recette/{id}
    requirements: 
        id: '\d+'
    controller: App\Controller\RecetteController::recetteById

另一种实现方法是将subRecette放在recetteById之前,但这很容易出错。

相关问题