はじめに
本連載では、PHP上で動作するアプリケーションフレームワークであるZend Frameworkについて紹介していきます。前回の予告どおり、今回はビューヘルパーを自作する方法、Zend FrameworkとSmartyを連携させる方法についての説明を行います。今回紹介するSmartyはウェブページのデザインと設計を分けるための仕組みの一つで、上手に使えばウェブサイトの管理の手間を減らすことができます。
対象読者
PHPの基本構文は一通り理解しているが、フレームワークを利用したことはないという方を対象としています。
これまでの記事
- Zend Framework入門(1):フレームワークの全体像とインストール
- Zend Framework入門(2):Hello World!アプリケーションの作成
- Zend Framework入門(3):PHPでMVCアプリケーションを構築しよう - Zend_Controller(前編) -
- Zend Framework入門(4):PHPでMVCアプリケーションを構築しよう - Zend_Controller(中編) -
- Zend Framework入門(5): Zend Framework入門(5):PHPでMVCアプリケーションを構築しよう - Zend_Controller(後編)-
- Zend Framework入門(6):抽象化レイヤによるデータベースアクセス手法 - Zend_Db(前編) -
- Zend Framework入門(7):抽象化レイヤによるデータベースアクセス手法 - Zend_Db(後編) -
- Zend Framework入門(8):Zend Framework におけるビューの処理 - Zend_View(前編) -
- Zend Framework入門(9):Zend Framework におけるビューの処理 - Zend_View(中編) -
必要な環境
Zend FrameworkはPHP 5.1.4以降とWebサーバがインストールされている環境で利用可能です。本稿ではWebサーバとしてApache 2.2を、OSにWindows XPを採用し、アプリケーションを作成していきます。
以下に、今回アプリケーション作成/動作確認に用いた環境を示します(インストールにあたっては最新安定版の使用を推奨します)。各項目の詳細なインストール手順は、「サーバサイド技術の学び舎 - WINGS」より「サーバサイド環境構築設定手順」を参照ください。ただし Smarty のインストール手順に関しては Smarty のマニュアルを参照してください。
- Windows XP SP2
- PHP 5.2.5
- Apache 2.2.8
- Smarty 2.6.19
LinuxやFreeBSDなどUNIX系OSをお使いの方もコマンドはほぼ一緒ですので、パスなどは適宜読み替えてください。
ビューヘルパの自作
前回紹介したとおり、Zendにはさまざまなビューヘルパが組み込まれていますが、それでも必要な機能を持ったビューヘルパが見つからないかもしれません。その場合には自分でビューヘルパを作成することができます。
ビューヘルパの作成方法の説明の前に、まず標準的なZend_View関係のファイルの配置を確認します:
application/ views/ helpers/ (ビューヘルパ関係のファイルを配置するフォルダ) filters/ (ビューフィルタ関係のファイルを配置するフォルダ) scripts/ (ビュースクリプトを配置するフォルダ)
このうち、標準ではここのhelpersフォルダ(現在の例ですとC:\codezine\zendapps\views\helpers)に自作ビューヘルパーのファイルを配置することになります。また、ファイル名やヘルパのクラス名には次のような決まりがあります:
ヘルパの名前 | CamelCased(大文字ではじめる) | 例:MyHelper |
ファイル名 | CamelCased(大文字ではじめる) | 例:MyHelper.php |
クラス名 | Zend_View_Helperを入れて、CamelCasedにする(大文字ではじめる) | 例:Zend_View_Helper_MyHelper |
メソッド名 | camelCased(小文字ではじめる) | 例:myHelper; |
ここで、BR
タグを出力するビューヘルパBrTagの例を示します。ただBR
タグを出力するだけではつまらないので、先程示したDoctypeプレースホルダを見て、XHTMLの場合には<br />を、そうでない場合には<br>を出力するようにしてあります:
<?php
//クラス名は Zend_View_Helper_ + BrTag
class Zend_View_Helper_BrTag
{
//viewとsetView
メソッドを定義しておくと、
//呼び出し元のZend_Viewが自動的に$viewに代入される
public $view;
public function setView(Zend_View_Interface $view)
{
$this->view = $view;
}
//実際にヘルパとして呼び出されるメソッド
public function brTag()
{
$xhtml = "<br />\n";
//doctype を調べ、XHTMLでなかったら<br>を返すようにする
if (($this->view instanceof Zend_View_Abstract) &&
!$this->view->doctype()->isXhtml()) {
$xhtml = "<br>\n";
}
return $xhtml;
}
}
なお、ファイルを配置するフォルダとクラス名についてはZend_ViewのsetHelperPathとaddHelperPathで変更・追加することが可能です。
メソッド名 | 引数 | 説明 |
setHelperPath | $path, $prefix | ヘルパ名を探す場所を指定。$pathにある $prefix_ヘルパ名なるファイルを探す。 |
addHelperPath | $path, $prefix | ヘルパ名を探す場所を追加。$pathにある $prefix_ヘルパ名なるファイルを探す。 |
例えば、「C:/codezine/zendapps2/views/extra_helpers」に設置したHrTagヘルパ(クラス名はHTML_Tags_View_Helper_HrTag
)を探すように設定するには次のようにします:
$this->view->addHelperPath('C:/codezine/zendapps2/views/extra_helpers', 'HTML_Tags_View_Helper');