筆記一下
如果要透過ajax去讀取cakephp產生的xml
那麼controller內的function必須要重新設定新的default templeate
否則預設的default.ctp會干涉到xml的顯示
環境如下
我有一個controller叫mycontrol
裡面有一個action叫getxml,負責echo xml出來
而xml的內容由資料庫撈出資料產生
產生後,用ajax去讀取這個xml
ajax的路徑是/mycontrol/getxml
1.幫產生xml的設定view
在cakephp內是有一個地方可以放xml的預設模板
路徑在/app/views/layouts/xml/
我設定這個action的view到這個位置(注意 這只是這個action 使用的view的位置,在cakephp內一定是要有兩個view的模板合在一起的)
$this->viewPath .= ‘/xml’;
實際上這個設定的對應路徑會在
/app/views/mycontrol/xml/
設定好後,增加一個getxml.ctp到/app/views/mycontrol/xml/裡面
這個是view的內容使用之ctp
2.在cakephp的邏輯中,剛剛產生的ctp是不能單獨存在的,所以要設定一個預設的ctp,但是default的那組ctp是不能使用的
因為default的ctp使給一般網頁用的,並非給xml使用的,他會有很多的html code在裡面,當然也是可以設定全空白的default.ctp
只是這樣每一個view的header的地方都得在寫一次html head的code
所以重新給xml一個空白的ctp會是比較好的方式
設定default xml ctp的路徑
$this->layoutPath = ‘xml’;
會在實體的/app/views/layouts/xml/
再來設定預設的檔名
$this->layout = ‘xmldefault’;
設定好後,預設的檔名就會是xmldefault.ctp
然後就建立xmldefault.ctp,內容為空白,上傳到/app/views/layouts/xml/內
3.function getxml
內容的話就是產生一個xml的字串並且echo
可以使用cakephp提供的方法產生xml
也可以自己組合一組,但無論如何
第一行一定要是Content-Type: text/xml
這樣才有辦法顯示出真正的xml
例如在xmldefault.ctp內設定
讓所有的xml一開始就是xml格式
如果要用cakephp 提供的方式就輸入
$this->RequestHandler->setContent(‘xml’, ‘text/xml’);
不過前面一定要設定
var $components = array(‘RequestHandler’);
否則會有error,我認為這樣還滿麻煩的,不如在xmldefault.ctp內設定