Zend Framework1 では、アクション内で _forward メソッドを使用した場合でも、アクションヘルパーが登録されている場合には、アクションヘルパーの postDispatch メソッドがコールされます。
ここでは、アクションヘルパーの解除を行わないまま、postDispatch メソッド内でフォワードされているかを判定して処理をスキップするサンプルスクリプトを掲載しています。
スポンサーリンク
リクエストオブジェクトの isDispatched メソッドで判断する
次のサンプルスクリプトは、アクションヘルパーの postDispatch メソッドでフォワードされているかを判断しています。詳細はサンプル内のコメントを参照ください。
class Sample_Action_Helper extends Zend_Controller_Action_Helper_Abstract { public function postDispatch() { /* * アクション内で _forward メソッドが呼び出された場合に、 * アクションヘルパーの postDispatch メソッドの処理をスキップする */ if(!$this->getRequest()->isDispatched()) { return; } /* * * この位置には、_forward メソッドが呼び出されていない場合の処理 * */ } }
上記のサンプルは、_forward メソッドが呼び出された場合に、リクエストオブジェクトに対して setDispatched メソッドに false を設定して呼び出していることを利用した方法です。
なお、_dispatched フラグは任意の位置で変更可能なので、動作を把握した上で利用することが必要となります。注意しましょう。
最近、当ブログのライターであるゆきこが困窮しているのは事実なのですが、その割にはハイボール・ハイボールとうるさい!どなたかご支援お願いします。Amazon の欲しいものリストです。右メニュー(PCで見た場合)にあります。