使用 FOSRestBundle 和 Symfony2 覆盖路由中".{_format}"的默认值



我想知道是否可以在 FOSRestBundle 方法中定义路由,这些方法指定格式时前面没有"点"。

例如,假设我希望以下内容正常工作:

 http://somesite.com/api/user/20        (renders in the default/fallback format)
 http://somesite.com/api/user/20/json   (renders in JSON)
 http://somesite.com/api/user/20/xml    (renders in XML)

如果我尝试定义如下路由:

/**
 * @Get("/user/{id}/{_format}
 */
public function getUserAction($id)
{
  // do stuff
}

我明白这个:

Route pattern "/api/users/{maximum}/{_format}.{_format}" cannot reference variable name "_format" more than once.

这让我意识到它 - 通过它,我假设我们谈论的是FOSRestBundle而不是默认情况下的Symfony2 - 会自动添加".{_format}"到我定义的任何路线的末尾。我很惊讶!

所以现在,在我之前的例子中,它的工作原理如下:

 http://somesite.com/api/user/20        (renders in the default/fallback format)
 http://somesite.com/api/user/20.json   (renders in JSON)
 http://somesite.com/api/user/20.xml    (renders in XML)

可以肯定的是,这是一个很小的差异,但是,我正在尝试移植使用此语法的旧版应用程序。我正在尝试做的事情可能吗?如果是这样,我如何禁用自动添加".{_format}"到每条路线?

谢谢!

一年多过去了,FOSRestBundle现在支持我在上面寻找的功能。

您可以通过以下配置控制此行为:

fos_rest:
    routing_loader:
        default_format:       ~
        include_format:       true

include_format设置为 false 以从路由中删除格式。

您可以在此处查看 FOSRestBundle 的扩展配置选项。

最新更新