アクションヘルパー
ここから、アクションヘルパーの使用方法について解説していきます。
組み込みヘルパー
あらかじめ組み込まれているアクションヘルパーが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()
」のみです。以下に実行結果を示します。
