使用FOSRestBundle和Symfony2覆盖路由中的默认值“。{_ format}”

时间:2012-12-07 19:26:11

标签: symfony symfony-2.1 fosrestbundle

我想知道是否可以在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}”?

谢谢!

1 个答案:

答案 0 :(得分:6)

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

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

fos_rest:
    routing_loader:
        default_format:       ~
        include_format:       true

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

您可以查看FOSRestBundle here的扩展配置选项。