SHOEISHA iD

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

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

Zend Framework入門

Zend Framework入門(8):ビューの処理の流れを理解しよう

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

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

Zend_Viewの処理の流れ

 Zend_Viewは、MCVモデルで言うところのビューを担当するコンポーネントです。Zend_Viewは、コントローラからデータや表示方法についての指示を受け取り、表示内容を作成したうえでその表示内容をコントローラに返します。

 実は、前回までに登場したサンプルもZend_Viewを利用しています。フロントコントローラは、標準ではZend_Viewのインスタンスを自動的に生成し、その生成した結果を表示するようになっています。そのため、内容の生成や、生成の補助を含むZend_Viewのいくつかの機能は、既に登場しているわけです。

 では最初に、コントローラの視点から見てZend_Viewをどのように使うかを説明します。おおまかに言って次のような流れになっています。

  1. Zend_Viewのインスタンスを作成します。
  2. Zend_Viewのインスタンスに、必要な変数を設定します。
  3. 実際に描画を行う「ビュースクリプト」をZend_Viewのインスタンスにrenderメソッドで渡します(Zend_Viewがビュースクリプトを処理して、出力を生成します)。
  4. 描画の結果がrenderメソッドの返り値として戻ってきます。

 また、Zend_Viewには表示内容作成を支援するための、次の機能も提供しています:

  • 変数のエスケープ処理。
  • ヘルパによる内容の作成。
  • 作成された内容へのフィルタ。

 これらを図にすると、次のようになります:

図A Zend_Viewの処理の流れ
図A Zend_Viewの処理の流れ

 なお、コントローラの役割を行うスクリプトを、ここからはコントローラスクリプトと呼ぶことにします。

Zend_Viewを使った簡単な例

 前回までの例では、Zend_Viewはフロントコントローラによって自動的に作成されていました。これではZend_Viewがどのように動作しているのかが分かり辛いので、まず直接Zend_Viewのインスタンスを作成し、使う例を見ていきましょう。この例は、コントローラに対応する部分の「index.php」とビュースクリプトの「view.phtml」から構成されています。

 なお、例を単純にするために、「view.phtml」は「index.php」と同じフォルダに配置されているとします(一般的なファイルの配置は後で説明します)。

 「index.php」では、前述の手順通りにZend_Viewのインスタンスを作成し、変数を設定したうえでビュースクリプトを渡しています。そして返ってきた描画結果を出力しています。

コントローラスクリプト(index.php)
<?php
require_once 'Zend/View.php';

$view = new Zend_View(); // インスタンスの作成
$view->str = '<b>エスケープのテスト</b>'; //データの設定
$view->abc = array('a', 'b', 'c'); //データの設定

$view->setScriptPath('.');// ビュースクリプトの設置してある場所

echo $view->render('view.phtml'); // 描画の実行と出力

 「view.phtml」には描画の方法が記述されています。ここで注意しておく必要があるのは、「view.phtml」で実行されるコードについてはネームスペースがZend_Viewのオブジェクトのものになっていることです。つまり、コントローラスクリプトでZend_Viewのインンスタンスの変数として設定された値($view->str$view->abc)はthisの変数($this->str$this->abc)として参照されます。

ビュースクリプト(view.phtml)
<html>
<head><title>Hello Zend_View!</title></head>
<body>
 <p><?php echo $this->escape($this->str); /* エスケープ処理 */ ?></p>
 <?php echo $this->htmlList($this->abc); /* ビューヘルパの利用 */ ?>
</body>
</html>

 ここでは、$this->escapeは「エスケープ処理」を、$this->htmlListは「ビューヘルパの呼び出し」を行っています。

 エスケープ処理はHTMLで特別な意味を持つ文字を、そのまま表示されるようにする処理です。ここでは、元の文字列の<>を、それぞれ&lt;&gt;で置き換えています。

 ビューヘルパは、よく使われる表示を登録しておくための仕組みです。htmlListはZend_View組み込みのビューヘルパで、配列を受け取って、それをHTML表現のリストに変換したものを返します(組み込みのもの以外に、自分でビューヘルパを作成し、登録することもできます)。ビューヘルパについては、次回で詳しく説明する予定です。

 「index.php」を実行した結果は次のようになります。

単純な例の実行結果
単純な例の実行結果

次のページ
フロントコントローラを利用した場合のZend_Viewの作成

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

  • 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/2716 2008/07/23 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング