第1回 PHP開発でZend Frameworkを知らないだなんて嘘ですよね?「Zend Framework」で加速するPHP開発(2/2 ページ)

» 2007年02月28日 09時33分 公開
[杉田直哉,ITmedia]
前のページへ 1|2       

Zend Frameworkの導入方法

 Zend FrameworkのパッケージはZendのWebサイトからダウンロードでき、2007年2月末現在のバージョンはPreview 0.8.0です。また、通常版のダウンロードのほかに、Subversionのリポジトリから開発版を入手することも可能です。

 現時点でZend Frameworkを使いたい方は、普段は開発版を利用し、公式リリースが出るたびに、新しい機能や既存APIの変更点などを確認していくと良いでしょう。

導入前の準備

 Zend FrameworkのMVCモデルは、Apache HTTP Serverのmod_rewriteの機能に依存しています。そのため、MVCモデルを利用する場合にはApache HTTP Serverか、これをベースに拡張したWebサーバ*が前提となります(MVCモデルの機能を使用しない場合は、IISなどほかのWebサーバと組み合わせて使用可能です)。

 Zend Frameworkの現在のバージョンでは、コンパイル済みのApache2が同梱されるようになったため、Zend Frameworkの稼働に必要なランタイムが一括で導入可能になっています。また、当然ですがPHPのコミュニティーサイトからダウンロードできる通常のPHPも使用できます。

Zend Frameworkのダウンロード

 Zend Frameworkのパッケージは、zipまたはtar.gzで圧縮されていますが、展開すると次のようなディレクトリ構造になっており、それぞれの内容は表2のようになります。

demos

documentation/

incubator/

library/

tests/

LICENSE.txt

NEWS.txt

README.txt


表2 表2 Zend Frameworkパッケージの内容(クリックで拡大)

ライブラリをPHPのinclude_pathに含める

 Zend Frameworkのライブラリ(Coreが含まれるディレクトリ)をPHPのinclude_pathに設定することで、各クラス・インタフェースの呼び出しを簡略化できます。その際は次の2通りの方法が一般的です。

  1. php.iniのinclude_pathディレクティブにZend Frameworkのlibraryディレクトリへのパスを追加する(リスト2)
  2. 常に読み込まれる最初のPHP実行ファイルの先頭に、set_include_pathメソッドを使用して追加する

 どちらを使っても良いのですが、後者の方法を用いることで、「ランタイムとなるPHPの設定に左右されなくなる」(配布の容易性)というメリットがあります。アプリケーションごとにFrameworkのバージョンを分けたい場合に使うと良いでしょう。ただし、どのURLへアクセスする場合にも、必ず参照されるようなFront ControllerとなるPHPスクリプトが存在する必要があります(Front Controllerについては後述)。

include_path = ".;C:/Development/application/library"


リスト2 php.iniの変更

Zend FrameworkのMVCモデルと設定

 Zend Frameworkでは、Front ControllerパターンのMVCモデルが採用されています(図1)。この方式では、フロントコントローラーへアクセスを集中させた後、次のように各コンポーネントで処理を行います。

  1. Routerでは、URLに従ってルーティング制御を決めZend_Controller_Dispatcher_TokenオブジェクトにまとめてDispatcherに受け渡す
  2. Dispatcherは、Zend_Controller_Dispatcher_Tokenオブジェクト内の値に従ってAction Controllerを呼び出し、Action Controllerに定められているActionメソッドを実行する
  3. Actionメソッド内ではModelクラスとのやり取りを行うか、またはブラウザ画面への表示を制御するViewクラスへ変数をセットして呼び出す
図1 図1 Front ControllerパターンのMVCモデル

 Routerの選択でコーディングの規約が多少変化するものの、Model-View-Controllerのレイヤーに分けてお互いを独立としたコンポーネントにする点において、Zend Frameworkはほかの多くのMVCフレームワークと変わりません。Zend Frameworkでは、各コンポーネントを別々のディレクトリに保管する次のようなディレクトリ構造*を推奨しています。

controllers/

models/

views/


 利用者がコードの中で各ディレクトリを指定するような仕様*となっているので、このディレクトリ構造は使用する上での必須条件ではありません。RouterごとにAction Controllerのディレクトリを分けたり、Action ControllerごとにViewのディレクトリを分けたりすることも可能です。ただし、管理が煩雑になるため、特別な事情がない限りは推奨どおりに使用することをお勧めします。

  • httpd.confの設定

 Zend FrameworkのMVCモデルを使用するには、まずApache HTTP Serverのmod_rewriteを有効にする必要があります。httpd.conf内でrewrite_moduleがロードされていることを確認し、ルートディレクトリのAllowOverrideディレクティブの設定を変更します(リスト3)。これによって、Webサーバに公開されているすべてのディレクトリにおいて、.htaccessの設定が上書きされます。AllowOverrideの値は「All」でも構いませんが、ルーティング制御に必要なFileInfoを、.htaccessファイルの設定で上書きすることを許可する必要があります。


//mod_rewriteのロード
LoadModule rewrite_module modules/mod_rewrite.so
//Directoryディレクティブの設定
<Directory "C:/Program Files/Apache Group/Apache2/htdocs">
  Options Indexes FollowSymLinks
  AllowOverride FileInfo
</Directory>

リスト3 MVCを利用するための設定(httpd.conf)
  • .htaccessファイルの作成

 次に、httpd.confの設定に合わせて.htaccessファイルを作成します。Zend Frameworkで推奨されている.htaccessファイルの設定はリスト4のようになり、拡張子がjs、ico、gif、jpg、png、css以外のファイルに対するアクセスをindex.phpへのアクセスへrewriteする設定になります。これをZend Frameworkを使用するアプリケーションのルートディレクトリに配置して、PHPスクリプトへのアクセスをindex.phpで一括制御します。

RewriteEngine on

RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php


リスト4 推奨されている.htaccessファイルの設定

次回は

 ここまででZend FrameworkのMVCモデルを使用する準備は整いました。次回は、各コンポーネントの使用方法を説明していきます。

このページで出てきた専門用語

Apache HTTP Serverか、これをベースに拡張したWebサーバ

本稿ではこれ以降、Apache HTTP Serverとの組み合わせを例として解説する。

次のようなディレクトリ構造

controllersディレクトリには、Action Controllerが配置される。

利用者がコードの中で各ディレクトリを指定するような仕様

ただし、Action Controllerのファイル名は命名規約が存在するので注意が必要(例えばIndexコントローラの場合、IndexController.phpというように命名しなければならない)。


本記事は、オープンソースマガジン2006年11月号「Zend Framework」で加速するPHP開発を再構成したものです。


著者紹介

日本アイ・ビー・エム システムズエンジニアリング株式会社

杉田直哉

日本アイ・ビー・エム システムズ・エンジニアリング株式会社(ISE)は、日本アイ・ビー・エムグループにおけるSE技術者の専門家集団として1992年7月に設立された。

発足以来、IBM製品を中心とした難易度の高い複雑なシステム構築や先進技術の適用場面において、卓越したITスキルによりお客様と開発現場を支援してきた。

近年は、仮想化技術・グリッドコンピューティング・Web 2.0・オープンソースソフトウェア等々の先進技術分野での支援も展開している。


前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ