如何指定FOS \ RestBundle到json的默认格式?

时间:2013-10-16 04:05:56

标签: php symfony symfony-2.3 fosrestbundle

我的相应配置是

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

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

3 个答案:

答案 0 :(得分:21)

最终答案更容易,与FOS \ RestBundle无关:

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

答案 1 :(得分:10)

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

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

默认情况下,使用{_format}字符串生成路由。如果您想获得干净的网址(/jobs而不是/jobs.{_format}),那么您只需添加一些配置:

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

查看FOSRestBundle documentation了解更多信息。

答案 2 :(得分: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请求格式