2011-06-23 65 views
1

在我的web應用程序中,我總是用JSON回覆AJAX調用。
因此,我發現自己在很多動作做這個:Symfony 1 - 爲每個AJAX請求自動設置JSON內容類型

if ($request->isXmlHttpRequest()) { 
    $this->getResponse()->setHttpHeader('Content-type', 'application/json'); 
    return $this->renderText(json_encode($details)); 
} 

是否有辦法來自動獲取:隨時請求是AJAX,內容類型是JSON?

我在想我應該使用一個過濾器也許,但我不熟悉過濾器,也許有更好的解決方案。

任何建議都會受到歡迎。

感謝,

回答

3

我解決它的方式:

創建一個新類myActionssfActions延伸。在這個類來創建一個新的功能renderJson($data)

protected function renderJson($data) { 
    $this->getResponse()->setHttpHeader('Content-type', 'application/json'); 
    return $this->renderText(json_encode($data)); 
} 

現在,讓你的控制器類從myActions(而不是sfActions)繼承。在你的控制器的末尾,只需return $this->renderJson($data);

(我也做了一些模板。在renderJson,如果sf_debug的配置設置,並且它不是通過爲XmlHttp請求。)

0

我使用了類似的技術在我的項目之一,但我建議你也看看有關iPhone優化的this article。您可以將路由設置爲接受格式並根據該格式返回適當的模板。然後,您不需要設置標題,因爲它是按請求的格式設置的。

當然,這意味着您需要爲每個輸出模板創建單獨的模板文件,這似乎很麻煩,或者使用特定的佈局文件並跳過模板。所以最後它可能相當於相同的東西(或者至少相同數量的代碼)。

相關問題