我的相应配置是
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
不起作用,因为它仅用于自动路由生成。
答案 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
请求格式