はじめに
本連載では、PHP上で動作するアプリケーションフレームワークであるZend Frameworkについて紹介していきます。前回は、Zend FrameworkのMVCの中核となるZend_Controllerについて、フロントコントローラとアクションコントローラを中心に解説しました。第4回目となる今回は、Zend_Controllerの続編として、モジュール/ルーティングについて解説します。
対象読者
PHPの基本構文は一通り理解しているが、フレームワークを利用したことはないという方を対象としています。
これまでの記事
- Zend Framework入門(1):フレームワークの全体像とインストール
- Zend Framework入門(2):Hello World!アプリケーションの作成
- Zend Framework入門(3):PHPでMVCアプリケーションを構築しよう - Zend_Controller(前編) -
必要な環境
Zend FrameworkはPHP 5.1.4以降とWebサーバがインストールされている環境で利用可能です。本稿ではWebサーバとしてApache 2.2を、OSにWindows XPを採用し、アプリケーションを作成していきます。また、データベースを用いるサンプル(次回以降)では、MySQLを利用する予定です。以下に、今回アプリケーション作成/動作確認に用いた環境を示します(インストールにあたっては最新安定版の使用を推奨します)。各項目の詳細なインストール手順は、「サーバサイド技術の学び舎 - WINGS」より「サーバサイド環境構築設定手順」を参照ください。
- WindowsXP SP2
- PHP 5.2.4
- Apache 2.2.6
LinuxやFreeBSDなどUNIX系OSをお使いの方もコマンドはほぼ一緒ですので、パスなどは適宜読み替えてください。
モジュールについて
前回軽く触れたモジュールについて、解説します。
モジュールは、MVCアプリケーションを単位として扱います。つまり一つ一つのモジュールにそれぞれモデル/コントローラ/ビューが備わっています。モジュールは別のアプリケーションでも再利用することができるので、よく使う機能などをモジュールとしてまとめておけば便利です。モジュールに対しては、これまでのモジュールなしのMVCアプリケーション同様にフロントコントローラからモジュール内のアクションコントローラへディスパッチがなされます。
フォルダ配置
実際には、モジュールは次のように配置します(ドキュメントフォルダが「htdocs」、アプリケーションフォルダが「zendapps」の場合)。
htdocs/ index.php zendapps/ default/ (デフォルトのモジュール) controllers/ IndexController.php models/ views/ solid/ (モジュール) controllers/ models/ views/ liquid/ (モジュール) controllers/ models/ views/ …
「solid」「liquid」というフォルダ内にそれぞれMVCのフォルダが存在し、アプリケーションを構成しています。この「solid」「liquid」がモジュールとして扱われます。
「default」フォルダはデフォルトのモジュールで、モジュール名の指定がない場合にディスパッチされます。
モジュール内のコントローラクラス名
モジュール内のコントローラクラス名は「<モジュール名(最初大文字)>_<アクションコントローラ名>
」とします。例えばsolidモジュール内のIndexController.phpで定義されるコントローラクラスは、「Solid_IndexController
」となります。
デフォルトのモジュール内では、モジュール名つまり「Default_」をつける必要はありません。
モジュールの利用方法
フロントコントローラから実際にモジュールを利用するには次のようにします。
- モジュールのコントローラフォルダを指定する
- ルーティングでモジュールを指定する
コントローラフォルダの指定
前回フロントコントローラの項で紹介した「setControllerDirectory()
」の引数には、次のように配列を入れます(上記モジュール配置の場合)。
$front = Zend_Controller_Front::getInstance(); $front->setControllerDirectory( array( 'default' => '../zendapps/default/controllers', 'solid' => '../zendapps/solid/controllers', 'liquid' => '../zendapps/liquid/controllers' ) );
「addControllerDirectory()
」の場合は
$front->addControllerDirectory( '../zendapps/liquid/controllers', 'liquid');
のように、第1引数にパスを、第2引数にモジュール名を入れます。
また、「addModuleDirectory()
」でフォルダ内の複数のモジュールを一気に指定する方法もあります。上記モジュール配置の場合は「zendapps」内にモジュールがすべて入っていますので、次のように引数を「zendapps」フォルダとすることで各モジュールを指定できます。
$front = Zend_Controller_Front::getInstance();
$front->addModuleDirectory('../zendapps');
ルーティング
デフォルトのルーティングでは、モジュール名はコントローラ名の前に記述されます。つまり、
http://~/<モジュール名>/<コントローラ名>/…
となります。該当するモジュールがない場合、それはコントローラ名として扱われ、コントローラが探されることになります。