【问题标题】:Why symfony FOSRest bundle doesn't find the right controller?为什么 symfony FOSRest 包找不到合适的控制器?
【发布时间】:2019-09-20 15:45:12
【问题描述】:

我有两个动作:

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

/**
 * @Rest\Get("/items/available")
 */
public function getAvailableAction() : View

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

我该如何解决?

【问题讨论】:

    标签: rest symfony fosrestbundle


    【解决方案1】:

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

     /**
      * @Rest\Get("/items/{itemId}", requirements={"itemId" = "\d+"})
      */
    

    如果您的itemIdUUID,请将数字正则表达式从\d+ 更改为[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12} 或简化的[a-fA-F0-9\-]{36}

    别忘了清除缓存。

    【讨论】:

    • 嗯,有没有我可以使用的配置设置,而不是每次都编写正则表达式?
    • 自定义注释类并在其中定义要求,例如。 class RestGetUuid extends Get {…。或者停止使用注释并采用 YAML 配置,您可以在其中控制路由顺序。
    • 两种方法是否属于同一类?在这种情况下,您只需更改它们的定义顺序,以便首先匹配 getAvailableAction() 的路由。
    猜你喜欢
    • 2012-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多