ZendFramework では、デフォルトのビューとして Zend_Controller_Action_Helper_ViewRenderer が登録されます。登録はフロントコントローラ(Zend_Controller_Front)の dispatch メソッドで行われます。なお、ビューはアクションヘルパーとして登録されるため、すべてのアクションに対して実行されます。
ここでは、このビュー(自動レンダリング)を無効化するサンプルを掲載しています。
スポンサーリンク
ビューの無効化
フロントコントローラ(Zend_Controller_Front)はデフォルトで ViewRenderer アクションヘルパーを登録します。アクションヘルパーの登録は、Zend_Controller_Front::dispatch メソッドで行われるため、その前に登録しないよう制御するサンプルは次の通りです
bootstrap でビューの登録を行わないよう制御する
初期化処理(bootstrap)については次のリンクで詳細を確認できます。
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { protected function _initNoViewRenderer() { // 自動レンダリングの無効化 $front = Zend_Controller_Front::getInstance(); $front->setParam('noViewRenderer', true); } }
ただ、上記の方法では、すべてのアクションに対してビューが無効となりますので、一部のアクションのみビューを無効化したい場合などには向かない方法です。
もう一方の方法としては、viewRenderer という名前のビューを bootstrap で先に登録する方法があります。 なお、この方法は smarty などのテンプレートエンジンをデフォルトのビューの代用として使用する場合などに利用できます。
一部のアクションのみビューを使用しない
すべてのアクションに対してビューを無効(アクションヘルパー未登録)とするのではなく、アクションごとにビューの有効・無効を制御するサンプルは次の通りです。index コントローラの index アクションのビュー実行を無効化しています。
class IndexController extends Zend_Controller_Action { public function indexAction() { /* * フロントコントローラを取得してパラメータを設定する場合 */ $front = Zend_Controller_Front::getInstance(); $front->setParam('noViewRenderer', true); /* * ビューヘルパーを無効化する * setNoRender または setNeverRender メソッドを呼び出す */ $this->_helper->getHelper('ViewRenderer')->setNoRender(true); //$this->_helper->getHelper('ViewRenderer')->setNeverRender(true); /* * 思い切って アクションヘルパーの登録を解除する場合 */ if (Zend_Controller_Action_HelperBroker::hasHelper('ViewRenderer')) { Zend_Controller_Action_HelperBroker::removeHelper('ViewRenderer'); } } }
メモ
ビューレンダ アクションヘルパーに関しては、上記の他 _redirect メソッドによって、リダイレクトする場合もビューは実行されません。例えば、次の例にあるように index コントローラの index アクションに対するビューのレンダリングは行われません。
class IndexController extends Zend_Controller_Action { public function indexAction() { // next アクションへリダイレクト $this->_redirect('http://localhost/index/next'); } public function nextAction() { echo 'index/next action'; } }