2013-12-17 29 views
1

我的目標是在用戶代理設置爲除json或xml以外的其他任何內容時具有默認的json輸出。我已經配置了FOSRestBundle 1.1.0,如下所示:FOSRestBundle:如何配置備用格式

fos_rest: 
format_listener: true 
param_fetcher_listener: true 
view: 
    default_engine: php 
    formats: 
     json: true 
     xml: true 
    templating_formats: 
     html: false 
    view_response_listener: force 
routing_loader: 
    default_format: json 

This works。當我這樣做,我可以不再格式之間的任何附加?_format=json?_format=xml,也是接受頭部似乎被忽略切換

format_listener: 
    rules: 
     - { fallback_format: json, prefer_extension: false, priorities: ['xml', 'json'] } 

,它總是使用不管我指定:現在我增加了如下配置在accept頭中。

如何配置FOSRestBundle,使其通過參數/ HTTP請求標頭接受json或XML 如果瀏覽器接受的格式爲HTML,會回退到json?

回答

2

按照FOSRestBundle Docs

注意,如果_format在路線內匹配,則虛擬Accept報頭設置添加用含水設置一個比最低Accept報頭下,這意味着格式中檢查在最後的優先事項匹配。如果prefer_extension設置爲true,那麼虛擬Accept頭將比最高的q高一個,導致首先檢查擴展。將優先級設置爲非空數組可啓用Accept頭協商。

此外,我注意到在rules部分,您缺少path選項。所以應用程序不知道應用規則的路徑。

看看我鏈接到上面的文檔,它有一個例子。

+0

雖然我已經多次閱讀文檔,但這個答案讓我找到了正確的解決方案。一個規則是不需要做這項工作;相反,我所缺少的是路由的默認格式,我已將其設置爲JSON。 – Felicitus