【问题标题】:Symfony routing API problemsSymfony 路由 API 问题
【发布时间】:2022-12-01 18:20:02
【问题描述】:

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

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函数

recetteByID :

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

【问题讨论】:

  • 路线名称中的那个点真的让我印象深刻。您可以尝试将其替换为_吗?
  • 我不能,它必须是名称“sub-recette”

标签: php api symfony routes


【解决方案1】:

在编辑问题并更仔细地阅读之后,我明白了问题所在。

路由按照先匹配者获胜的原则工作。对它来说,sub-recette 看起来很像一个完全有效的 ID。

为了避免这种情况,如果您的 ID 是数字,您可以这样做:

recette.recetteById:
    path: /api/recette/{id}
    requirements: 
        id: 'd+'
    controller: AppControllerRecetteController::recetteById

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

【讨论】:

  • 感谢您的回答,它有效:),也感谢您的编辑。顺便说一句,如果我将subRecette 放在recetteById 之前,那么什么是“容易出错”
猜你喜欢
  • 2021-02-20
  • 2017-09-10
  • 2011-05-20
  • 1970-01-01
  • 1970-01-01
  • 2013-01-18
  • 2011-09-12
相关资源
最近更新 更多