Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

Zend Framework入門(5):PHPでMVCアプリケーションを構築しよう - Zend_Controller(後編) -

Zend Frameworkによる実践的なPHPアプリケーション開発 5

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
2008/04/07 14:00
目次

アクションヘルパー

 ここから、アクションヘルパーの使用方法について解説していきます。

組み込みヘルパー

 あらかじめ組み込まれているアクションヘルパーが3種類あります。ここでは概要を紹介します。詳細はマニュアルを参照してください。

  1. FlashMessenger:
  2. Zend_Sessionを利用した、セッション単位でユーザーに見せるメッセージを扱うヘルパーです。addMessage(<メッセージ>)Zend_Session_Namespaceを使用し、メッセージを保管、次回リクエスト時にgetMessage()でそのメッセージを取り出すことができます。詳細はZend_Sessionの回で解説予定です。
     
  3. ViewRenderer:
  4. コントローラにおけるビュー処理関連のヘルパーです。第2回で触れた通り、デフォルトで有効になっており、ビューの処理が容易にできるようになっています。
    ViewRendererは、ヘルパー内のpreDispatch()でビューオブジェクトを定義しています。そのためアクションコントローラ内ではすぐに「$this->view」としてビューオブジェクトを扱えます。またビュースクリプトのパスはコントローラ名/アクション名から自動的に判断され、ヘルパー内のpostDispatch()render()がコールされる仕組みになっています。詳細はZend_Viewの回で解説予定です。
     
  5. Redirector:
  6. リダイレクト用のヘルパーです。_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() リダイレクト先を得る
     
    以下、サンプルを示します。
     
    RdsanpleController.php
    <?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)です。従ってアクションヘルパーを使用するにはヘルパーブローカを仲介する必要があります。

     
  1. アクションヘルパーの登録
  2. アクションヘルパーは
     
    Zend_Controller_Action_HelperBroker::addHelper($helper);
    
     
    としてブローカに登録します。$helperはアクションヘルパーのインスタンスです。
    しかしわざわざインスタンスを作成しなくても、ヘルパーを登録する方法はあります。以下のメソッドを用います。
     
    • Zend_Controller_Action_HelperBroker::addPrefix(’<ヘルパークラスのプレフィックス>’):
    • ヘルパークラスのプレフィックスを指定すると、そこからヘルパーのパスが推測され、そのプレフィックスを持つヘルパーが登録されます。
       
    • Zend_Controller_Action_HelperBroker::addPath(’<ヘルパークラスへのパス>’,’<ヘルパークラスのプレフィックス>’):
    • 上記に加え、ヘルパーのパスを明示的に指定します。
     
    addPrefixは、プレフィックスの「_」をフォルダ階層の区切りと解釈してパスへと変換し、addPathを行うメソッドです。例えば
     
    Zend_Controller_Action_HelperBroker::addPrefix(
        'Myzendapps_Codezine_Helpers')
    
     
    は、
     
    Zend_Controller_Action_HelperBroker::addPath(
        'Myzendapps/Codezine/Helpers','Myzendapps_Codezine_Helpers')
    
     
    と同等で、「Myzendapps/Codezine/Helpers」フォルダに存在する「Myzendapps_Codezine_Helpers」で始まる名前のヘルパーを登録します。
     
  3. ブローカからアクションヘルパーを初期化
  4. ヘルパーブローカは、Zend_Controller_Action$_helperで利用します。コンストラクタを見ると分かりますが、$_helperはヘルパーブローカのインスタンスです。
     
    Zend/Controller/Action.phpコンストラクタ内より
    $this->_helper = new Zend_Controller_Action_HelperBroker($this);
    
     
    $_helperを利用して、ヘルパーを初期化します。
     
    $myHelper = $this->_helper->getHelper('<ヘルパー名>');
    
     
    $myHelperには、ヘルパーのインスタンスが返されます。
     
  5. その他のヘルパーブローカのメソッド群
  6. その他、ヘルパーブローカには下表のようなメソッドがあります。
     
    Zend_Controller_Action_HelperBrokerのメソッド($nはプレフィックス抜きのヘルパー名)
    メソッド 内容
    hasHelper($n) そのヘルパーがブローカに登録されているか調べる
    getExistingHelper($n) 起動済みかブローカに登録済みのヘルパーを取得する。なければ例外を返す
    getStaticHelper($n) getExistingHelper()同様だが、ヘルパーが登録されていなければそのインスタンスを作成する
    removeHelper($n) 登録済みのヘルパーをブローカから削除する

サンプル

 では、アクションヘルパーを使ったごく簡単なサンプルを示します

AhsampleController.php
<?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」です。

controllers/helpers/Samplehelper.php
<?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()」のみです。以下に実行結果を示します。

実行結果
実行結果

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XMLD...

  • WINGSプロジェクト 川北 季(カワキタ ミノル)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂...

バックナンバー

連載:Zend Framework入門

もっと読む

All contents copyright © 2005-2019 Shoeisha Co., Ltd. All rights reserved. ver.1.5