2009-09-18 27 views
1

能有人請解釋這些功能:CakePHP RequestHandler:setContent/renderAs/respondAs ..什麼?

RequestHandlerComponent::renderAs() 
RequestHandlerComponent::respondAs() 
RequestHandlerComponent::setContent() 

感覺略顯多餘有他們三個(如公共方法反正)。如果我想用PDF文件回覆請求,是否意味着我必須調用所有三個函數?我應該如何在控制器中使用它們?

回答

8

他們都不一樣。從API Docs

renderAs
設置由$類型定義的內容類型的佈局和模板路徑。

I.e.或多或少的快捷方式$this->layout = '...'$this->render(...)

respondAs
設置基於類型地圖索引名稱響應標頭。如果DEBUG大於2,則頭文件未設置。

輸出header(...)

setContent
再添/設置給定名稱的內容類型(一個或多個)。此方法允許將內容類型映射到友好的別名(或擴展名),這允許RequestHandler在啓動方法中自動響應該類型的請求。

實際上沒有對輸出做任何事情,只是允許您添加默認情況下未定義的新類型。

對於輸出PDF(假設您已經將其作爲文件),您應該實際使用Media View

+0

「爲了輸出一個PDF(假設你已經把它作爲一個文件)」不,我使用FPDF生成一個。感謝您爲我清理'renderAs'和'respondAs',但是我對如何/在哪裏使用'setContent'感到困惑?它會讓你通過URL或類似的方式來確定響應類型嗎?例如:'mysite.com/reports/view/html'會自動用HTML響應,而'mysite.com/reports/view/pdf'用PDF響應? – nickf 2009-09-18 04:50:43

+1

是的,差不多。一個「擴展名」應該被解析並採取行動,比如'example.com/controller/action.xml'。 AFAIU'setContent()'允許您添加自定義擴展。查看上述文檔提到的啓動方法:http://api.cakephp.org/view_source/request-handler-component/#l-171 – deceze 2009-09-18 06:00:44

相關問題