アクションヘルパー
ここから、アクションヘルパーの使用方法について解説していきます。
組み込みヘルパー
あらかじめ組み込まれているアクションヘルパーが3種類あります。ここでは概要を紹介します。詳細はマニュアルを参照してください。
- FlashMessenger:
- ViewRenderer:
- Redirector:
Zend_Sessionを利用した、セッション単位でユーザーに見せるメッセージを扱うヘルパーです。addMessage(<メッセージ>)でZend_Session_Namespaceを使用し、メッセージを保管、次回リクエスト時にgetMessage()でそのメッセージを取り出すことができます。詳細はZend_Sessionの回で解説予定です。ViewRendererは、ヘルパー内のpreDispatch()でビューオブジェクトを定義しています。そのためアクションコントローラ内ではすぐに「$this->view」としてビューオブジェクトを扱えます。またビュースクリプトのパスはコントローラ名/アクション名から自動的に判断され、ヘルパー内のpostDispatch()でrender()がコールされる仕組みになっています。詳細はZend_Viewの回で解説予定です。_redirect()に比べ、リダイレクトに関する作法をより詳細に設定できます。具体的には、次のようなメソッドが揃っています。| メソッド | 内容 |
| setCode(<レスポンスコード>) | 303など、レスポンスコードを設定 |
| setExit(<true,false>) | リダイレクト後にexit()する(デフォルトtrue) |
| setGoto(<アクション名>,<コントローラ名>) | gotoのデフォルトURLを設定(_forward()と指定法は同じ) |
| setGotoUrl(<URL文字列>) | gotoUrlのデフォルトURLを設定 |
| setGotoRoute(<パラメータ指定の連想配列>,<addRoute()で指定したルート名>) | 登録済みのルートを利用してURLを設定 |
| setPrependBase(<URL文字列>) | ベースURLをリダイレクトメソッドで指定したURLの前に追加 |
| setUseAbsoluteUri(<true,false>) | リダイレクトの際に完全なURIを作成して使用する(デフォルトfalse) |
| メソッド | 内容 |
| goto(<アクション名>,<コントローラ名>) | (引数略でsetGotoで作成したURLに)リダイレクト |
| gotoUrl(<URL文字列>) | (引数略でsetGotoUrlで指定したURLに)リダイレクト |
| gotoRoute(<パラメータ指定の連想配列>,<addRoute()で指定したルート名>) | (引数略でsetGotoRouteで指定したURLに)リダイレクト |
| redirectAndExit() | リダイレクト後exit() (setExit(false)でも) |
| getRedirectUrl() | リダイレクト先を得る |
<?php require_once 'Zend/Controller/Action.php'; class RdsampleController extends Zend_Controller_Action{ protected $_redirector = null; public function init() { $this->_redirector = $this->_helper->getHelper('Redirector'); //(1) } public function wingsAction() { $this->_redirector->gotoUrl('http://www.google.co.jp'); //(2) } }
init()内の(1)でRedirectorヘルパーの初期化を行っています。wingsアクションが呼び出されると、ヘルパーのメソッドであるgotoUrlメソッドでGoogleへリダイレクトされます(2)。アクションヘルパーの作り方
アクションヘルパーは、Zend_Controller_Action_Helper_Abstractを継承して作成します。その際、次のようなメソッドが使用できます。
| メソッド | 内容 |
| setActionController() | アクションコントローラを設定する |
| init() | ヘルパーの初期化を行う |
| preDispatch() | ディスパッチ開始前に処理される |
| postDispatch() | ディスパッチ終了後に処理される |
| getRequest() | リクエストオブジェクトを取得 |
| getResponse() | レスポンスオブジェクトを取得 |
| getName() | ヘルパーの名前を取得 |
使い方
アクションヘルパーの登録や登録されたヘルパーの取得/コールなどを行うのが、ヘルパーブローカ(Zend_Controller_Action_HelperBroker)です。従ってアクションヘルパーを使用するにはヘルパーブローカを仲介する必要があります。
- アクションヘルパーの登録
- Zend_Controller_Action_HelperBroker::addPrefix(’<ヘルパークラスのプレフィックス>’):
- Zend_Controller_Action_HelperBroker::addPath(’<ヘルパークラスへのパス>’,’<ヘルパークラスのプレフィックス>’):
- ブローカからアクションヘルパーを初期化
- その他のヘルパーブローカのメソッド群
Zend_Controller_Action_HelperBroker::addHelper($helper);
$helperはアクションヘルパーのインスタンスです。addPrefixは、プレフィックスの「_」をフォルダ階層の区切りと解釈してパスへと変換し、addPathを行うメソッドです。例えば
Zend_Controller_Action_HelperBroker::addPrefix(
'Myzendapps_Codezine_Helpers')
Zend_Controller_Action_HelperBroker::addPath(
'Myzendapps/Codezine/Helpers','Myzendapps_Codezine_Helpers')
Zend_Controller_Actionの$_helperで利用します。コンストラクタを見ると分かりますが、$_helperはヘルパーブローカのインスタンスです。
$this->_helper = new Zend_Controller_Action_HelperBroker($this);
$_helperを利用して、ヘルパーを初期化します。
$myHelper = $this->_helper->getHelper('<ヘルパー名>');
$myHelperには、ヘルパーのインスタンスが返されます。| メソッド | 内容 |
| hasHelper($n) | そのヘルパーがブローカに登録されているか調べる |
| getExistingHelper($n) | 起動済みかブローカに登録済みのヘルパーを取得する。なければ例外を返す |
| getStaticHelper($n) | getExistingHelper()同様だが、ヘルパーが登録されていなければそのインスタンスを作成する |
| removeHelper($n) | 登録済みのヘルパーをブローカから削除する |
サンプル
では、アクションヘルパーを使ったごく簡単なサンプルを示します
<?php require_once 'Zend/Controller/Action.php'; class AhsampleController extends Zend_Controller_Action{ protected $_mysamplehelper = null; public function init() { Zend_Controller_Action_HelperBroker::addPath( '../zendapps/controllers/helpers','My'); //(1) $this->_mysamplehelper = $this->_helper->getHelper('Samplehelper'); //(2) } public function indexAction() { $this->view->assign('message',$this->_mysamplehelper->ver()); } }
(1)と(2)で、自作のアクションヘルパー「My_Samplehelper」を呼び出しています。(1)の「addPath」の第2引数を「My」と指定し、「../zendapps/controllers/helpers」内にある「My」をプレフィックスに持つヘルパーをすべて登録しています。今回のサンプルは「Samplehelper.php」が読み込まれ、(2)でアクションヘルパークラスである「My_Samplehelper」が登録されます。ヘルパー名は「Samplehelper」です。
<?php require_once 'Zend/Controller/Action.php'; require_once 'Zend/Version.php'; class My_Samplehelper extends Zend_Controller_Action_Helper_Abstract { public function ver() { return Zend_Version::VERSION; } }
「My_Samplehelper」クラスは「Zend_Controller_Action_Helper_Abstract」を継承して作られています。メソッドはバージョンを返す「ver()」のみです。以下に実行結果を示します。

