普通にZend Frameworkを使っていて、非同期通信をしてXMLでデータを返却するとなると
・Controllerの自動レンダリングを止めて
・レスポンスヘッダをXML形式にする
という手順が必要。
・Controllerの自動レンダリングを止めて
・レスポンスヘッダをXML形式にする
という手順が必要。
これをコンテキストスイッチというのを使うと、その手間が省けて、見た目もすっきりする。ZFではXMLとJSON形式のコンテキストがデフォルトで用意されている。
詳しくは、上記リンクを参照なんだけど、XML形式の場合の例を簡単に書くと
class HogeController extends Zend_Controller_Action {
public function init(){
$contextSwitch = $this->_helper->getHelper('contextSwitch');
$contextSwitch->addActionContext('hoge', 'xml')->
addActionContext('fuga', 'xml')->initContext();
}
と、これでhogeActionとfugaActionがXML形式のレスポンスに対応する。
呼び出し側は、http://localhost/hoge/fuga?format=xmlという感じでXML形式のレスポンスを要求する。
そうするとデフォルトではfuga.xml.tpl(僕はsmarty使ってるから)がレンダリングされて返却される。
ということで、同じロジックを使いながら、レスポンスの形式を呼び方ひとつで変えらて便利なんです。まあ結局XMLならXMLの独自の返却データとかあるだろうから完全に同じロジックというわけにはいかないかもしれないけど、それでも、だいぶ便利。
個人的には、エラーが発生したときに(ErrorAcitionを用意していれば)error/error.xml.tplが返却されるところがナイス、と思った。
コメントする