2013-10-16 23 views
11

我相应的配置是如何将FOS RestBundle的默认格式指定为json?

fos_rest: 
    view: 
     view_response_listener: force 

sensio_framework_extra: 
    view: 
     annotations: false 

,它真的惹恼指定路线为每次

@Route("/jobs", defaults={ "_format" = "json" }) 

那么有可能在默认情况下将其指定在某个地方?

PS:

如果我删除defaults={ "_format" = "json" }并调用/jobs端点我得到一个异常

Unable to find template "APIBundle:Jobs:post.html.twig". 

PPS:

routing_loader: 
    default_format: json 

不会工作,因为它仅用于自动路由生成。

回答

21

最终的答案是更容易和无关FOS \ RestBundle:

api: 
    resource: "@APIBundle/Controller/" 
    type:  annotation 
    defaults: {_format: json} # <<<<<<< 
    prefix: /api/ 
+0

它没有使用'type:rest'? –

+0

@MateoTibaquirá:是的 – zerkms

10

如果没有指定路由加载器将用于_format参数,您可以指定default_format

# app/config/config.yml 
fos_rest: 
    routing_loader: 
     default_format: json 

默认情况下,使用{_format}字符串生成路由。如果你想获得干净的URL(/jobs代替/jobs.{_format}),那么所有你需要做的就是增加一些配置:

# app/config/config.yml 
fos_rest: 
    routing_loader: 
     include_format:  false 

看一看在FOSRestBundle documentation更多的信息。

+0

它将** **仅如果我使用自动线路生成工作。使用自定义路线不起作用。对不起,没有答案。 – zerkms

+0

它适合我。在我的控制器中使用@Route('/ foo'),调用/ foo不会得到任何异常。 – Picoss

+0

格式最终是否被接受为“json”?如果删除该参数 - 行为是否改变? – zerkms

7

我无法测试这个解决方案自己,但以下the documentation似乎你可以通过路径

给予规则

config.yml

fos_rest: 
    format_listener: 
     rules: 
      # setting fallback_format to json means that instead of considering 
      # the next rule in case of a priority mismatch, json will be used 
      - 
       path: '^/' 
       host: 'api.%domain%' 
       priorities: ['json', 'xml'] 
       fallback_format: json 
       prefer_extension: false 

这种使用默认格式, Accept-headers的要求

text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8,application/json 

将导致json请求格式

+0

我其实已经看到它,但还没有尝试。我会明天尝试,并会结果你。谢谢:-)但是我已经看到了一个缺点 - 那就是你**必须**在Accept头中传递application/json,而我希望'json'只是无条件地满足每个请求的格式。 – zerkms

+1

...但在彻底读完该页面后 - 我认为它可能有效。我相信会的。无论如何,我会明天让你知道 – zerkms

+0

感谢参与,我找到了真正的答案:-) – zerkms

相关问题