SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Zend Framework入門

Zend Framework入門(9):
Zend Frameworkにおけるビューの処理 - Zend_View(前編) -

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


  • X ポスト
  • このエントリーをはてなブックマークに追加

ビューヘルパの解説 2

 アクションビューヘルパとパーシャルビューヘルパは、作成済のコントローラアクションやビュースクリプトをページの一部として表示するためのヘルパです。

アクションビューヘルパ

 アクションビューヘルパは、コントローラのアクションを呼び出すための仕組みです。アクション名、コントローラ名、モジュール名と、アクションに渡す引数を与えます。モジュール名は省略可能で、指定しなかった場合にはデフォルトのモジュールからコントローラとアクションを探します。ただし、_forward()が呼び出されたり、他のアクションにリダイレクトされるようなアクションは無効ですので注意してください(空の文字列を返します)。

 以下は、アクションビューヘルパを使って、IndexコントローラのHelloアクションを呼び出す例です。

アクションビューヘルパを利用する例(index.phtml)
<?php echo $this->action('hello','index')?>

パーシャルビューヘルパ

 パーシャルビューヘルパは、他のビュースクリプト(パーシャルスクリプト)を呼び出すための仕組みです。この呼び出された先の名前空間は元のビュースクリプトとは独立なので、変数名の衝突を気にせずに別に作られたビュースクリプトを呼び出すことができます。

パーシャルビューヘルパ
ヘルパ名 引数 説明
partial $name、 $module、 $model $nameのスクリプトを処理した結果を返す。
partialLoop $name、 $module、 $model $modelは配列か、反復処理が可能(iterative)なオクジェクト。$nameのスクリプトを、$modelの各要素について処理した結果を返す。

 Zend_Viewは、標準ではビュースクリプトのパス「C:/codezine/zendapps/views/scripts」へパーシャルスクリプトを探しに行きます。しかし、これではファイルの整理がしづらいので、パーシャルスクリプトを置くためのフォルダを作成し、これをパスに追加することにします。

パスの追加(C:/codezine/zendapps/controls/IndexController.php)
...
class IndexController extends Zend_Controller_Action
{
    public function init()
    {
       //パーシャルビューヘルパで使うビュースクリプトを置く場所
       $this->view
          ->addScriptPath('/codezine/zendapps/views/scripts/partial');
パーシャルビューヘルパの例

 それでは、まず普通のパーシャルビューヘルパの例を見てみます。

パーシャルビューヘルパの例(c:/codezine/zendapps/views/scripts/index/index.phtml)
...
<h2>新たなメモを入力する</h2>
<?php echo $this->partial('inputForm.phtml',
                          array('dateTimeMemos'
                                 =>$this->dateTimeMemos)) ?>
<?php echo $this->partial('clearForm.phtml') ?>
...

 実は先程説明した入力フォームはビュースクリプト本体(index.phtml)ではなくパーシャルスクリプト(inputForm.phtml)に記述しておいたものだったのでした。このように、ページの部品を別々に記述することで、ページの編集の見通しを良くできます。

 ここで注意が必要なのは、元のスクリプトとパーシャルスクリプトでは名前空間が違うので、同じ名前の変数(この場合ではdateTimeMemos)でも明示的に渡す必要があることです。

パーシャルループビューヘルパの例

 次に、パーシャルループビューヘルパです。パーシャルループビューヘルパは$modelの各要素に対して、繰り返しパーシャルスクリプトを呼ぶメソッドです。

 例えば「dateTimeとmemoを鍵に持つ連想配列」の配列である、dateTimeMemosがあったとします。

パーシャルループビューヘルパへの引数
dateTimeMemos = array(array('dateTime' => '2008年6月20日 13:57:46',
                            'memo' => 'テスト1'),
                      array('dateTime' => '2008年6月20日 13:58:32',
                            'memo' => 'テスト2'),
                      array('dateTime' => '2008年6月20日 14:02:46',
                            'memo' => 'テスト3'));

 これに対して、パーシャルループビューヘルパは次のように呼び出します(これはパーシャルビューヘルパを複数回呼び出すのと同じ意味です)。

パーシャルループビューヘルパの例
//パーシャルループビューヘルパを使用
echo $this->partialLoop('hiddenMemos.phtml', 
                        null, 
                        $this->dateTimeMemos);

//パーシャルビューヘルパを使用した次と同じ意味
echo $this->partial('hiddenMemos.phtml', null,
                    array('dateTime' => '2008年6月20日 13:57:46',
                          'memo' => 'テスト1'));
echo $this->partial('hiddenMemos.phtml', null,
                    array('dateTime' => '2008年6月20日 13:58:32',
                          'memo' => 'テスト2'));
echo $this->partial('hiddenMemos.phtml', null,
                    array('dateTime' => '2008年6月20日 14:02:46',
                          'memo' => 'テスト3'));

 hiddenMemos.phtmlの方からは、次のようにdateTimeとmemoを参照できます。

パーシャルループビューヘルパのスクリプトの例(c:/codezine/zendapps/views/scripts/partial/hiddenMemos.phtml)
<?php
  echo $this->formHidden("memos[$this->dateTime]", $this->memo);

 これを実行すると次のようになります。

実行結果(※実際には改行はされず、1行で出力されます)
<input type="hidden" name="memos[2008年6月20日 13:57:46]" 
value="テスト1" id="2008年6月20日 13:57:46" />
<input type="hidden" name="memos[2008年6月20日 13:58:32]" 
value="テスト2" id="2008年6月20日 13:58:32" />
<input type="hidden" name="memos[2008年6月20日 14:02:46]" 
alue="テスト3" id="2008年6月20日 13:57:46" />

 隠し要素なので見えていませんが、これがサンプルでメモを保持しておくための仕組みになっています。

次のページ
プレースホルダ

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Zend Framework入門連載記事一覧

もっと読む

この記事の著者

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

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 風田 伸之(カゼタ ノブユキ)

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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/2842 2008/09/01 16:30

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング