在某些時候,需要Action來輸出例如xml等格式
這時候就可以透過contextSwitch()來選擇你要輸出的格式
首先在Controller中加入init()函式,選擇你想要的輸出格式
indexController
<?php class IndexController extends Zend_Controller_Action { public function init(){ $this->_helper->contextSwitch() //加入Context:json、xml(加在indexAction裡) ->addActionContext('index', 'json') ->addActionContext('index', 'xml') ->initContext(); } public function indexAction() { $this->view->test = 'TEST'; } } ?>
其中json可以直接輸出,不需要再令外的view來顯示
只要用http://url/Zend/?format=json
就可以看到
{"test":"TEST"}
除了json之外,其他格式例如成xml,必須再做一個樣板
樣板名稱就是以Action名稱.格式.phtml
以範例indexAction來說,需要在views/scripts/index/(也就是放index.phtml的目錄)裡再新增一個index.xml.phtml
index.xml.phtml
<?xml version="1.0" encoding="UTF-8"?> <root> <test><?php echo $this->test; ?></test> </root>
輸入http://url/Zend/?format=xml就可以看到結果
除了這兩樣格式之外,如果要新增其他格式,例如RSS格式,就必須自訂Context
indexController
<?php class IndexController extends Zend_Controller_Action { public function init(){ $this->_helper->contextSwitch() //自訂Context ->addContext('rss', array('suffix' => 'rss')) ->addActionContext('index', 'rss') ->initContext(); } public function indexAction() { $this->view->test = 'TEST'; } } ?>
同樣要另外寫一個樣板
index.rss.phtml
<?xml version="1.0" encoding="UTF-8"?> <rss version="2.0"> <channel> <title><?php echo $this->test; ?></title> </channel> </rss>
除了上述那些格式,如果有使用到Ajax時,因為contextSwitch裡是沒有註冊HTML context的,必須使用AjaxContext
<?php class IndexController extends Zend_Controller_Action { public function init(){ $this->_helper->ajaxContext() ->addActionContext('index', 'html') ->initContext(); } public function indexAction() { $this -> view -> test = array("name"=>"Johnson"); } } ?>
AjaxContext的context-suffix是ajax,所以必須再建立index.ajax.phtml
<div><?php print_r($this -> test); ?></div>
輸入http://url/Zend/?format=html就可以看到結果