2013-10-16 26 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

相關問題