为什么symfony FOSRest捆绑包不';找不到合适的控制器?

为什么symfony FOSRest捆绑包不';找不到合适的控制器?,rest,symfony,fosrestbundle,Rest,Symfony,Fosrestbundle,我有两个行动: /** * @Rest\Get("/items/{itemId}") */ public function getAction(UuidInterface $id): View 及 问题是,当我试图通过链接items/available调用getAvailableAction时,会调用getAction。我猜它将单词available解释为{itemId}somewhy 我该怎么解决呢?你猜对了。只需定义一个适当的要求: /** * @Rest\Get("/items

我有两个行动:

/**
 * @Rest\Get("/items/{itemId}")
 */
public function getAction(UuidInterface $id): View

问题是,当我试图通过链接
items/available
调用getAvailableAction时,会调用getAction。我猜它将单词available解释为
{itemId}
somewhy


我该怎么解决呢?

你猜对了。只需定义一个适当的要求:

 /**
  * @Rest\Get("/items/{itemId}", requirements={"itemId" = "\d+"})
  */
如果您的
itemId
是,请将数字正则表达式从
\d+
更改为
[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}
或简化的
[a-fA F0-F0-9\]{36}


不要忘记清除缓存。

Hm,是否有任何配置设置可以用来代替每次编写regex?自定义注释类并在其中定义需求,例如,
class RestGetUuid extensed Get{…
。或者停止使用注释并采用YAML配置,在这里您可以控制路由顺序。这两种方法是同一类的一部分吗?在这种情况下,您可以更改它们的定义顺序,以便首先匹配
getAvailableAction()
的路由。
 /**
  * @Rest\Get("/items/{itemId}", requirements={"itemId" = "\d+"})
  */