第2回 Zend Frameworkの各コンポーネントを一気に制する:「Zend Framework」で加速するPHP開発(1/3 ページ)
前回は、Zend Frameworkの概要とその導入方法について説明しました。今回は、各コンポーネントの使用方法について紹介していきます。
第1回となる前回では、Zend Frameworkの概要を説明した後、Zend Frameworkの導入方法について説明しました。今回は、各コンポーネントの使用方法について紹介していきます。
各コンポーネントの役割と使用法
さて、ここまででZend FrameworkのMVCモデルを使用する準備は整いました。ここからは、各コンポーネントの使用方法を説明しますが、その前にZend FrameworkのFront Controllerの動作をもう一度まとめておきましょう(図1)。まず、ブラウザで指定されるURLはmod_rewriteの機能によってindex.phpのアクセスへrewriteされます。index.phpではZend_Controller_Frontクラスを読み込み、このクラスがRouterとなるクラスとDispatcherとなるクラスへ振り分けます。指定されたURLは、Routerによって「どのAction ControllerのどのActionを呼び出す」という情報に解釈されて、Zend_Controller_Dispatcher_Tokenにまとめられます。これをDispatcherが受け取り、該当のActionへ制御が移ります。
利用者が独自に書かなければならないソースコードは次の4種類です。
- index.php:どのRouterを使用するかを設定する
- Action Controller:各コントローラーにActionメソッドを定義する
- Viewクラス:ブラウザ画面に表示される際のレイアウトやロジックを定義する
- Modelクラス:データベースアクセスやロジックを処理するモデル層を定義する
index.php:どのRouterを使用するかを設定する
Zend FrameworkにはPreview 0.1.5リリースの時点で2つのRouterが存在し、どちらを選ぶかでindex.phpの書き方も変わってきます。
簡単に使用できるが自由度の低いZend_Controller_Routerクラス
デフォルトではZend_Controller_Routerクラスが使用されます。Zend_Controller_Routerクラスは、簡単に使用できて独自に記述するコードが最小限で済みます(リスト1)。ただし、ルーティング定義が固定されており、図2のようにURLの指定方法も固定されてしまいます。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
後ろにつけるキーは、Actionメソッド内で変数として取得できます。このURLの解釈で分かるとおり、Zend_Controller_Routerクラスを使用する場合は、DocumentRootにindex.phpが配置されている必要があります。このため、1つのWebサーバでZend Frameworkを使用した複数のアプリケーションをホストしたい場合は、Virtual Hostを設定してアプリケーションごとにホスト名称を用意する必要があります。
柔軟に利用できるがコーディング量の増えるZend_Controller_RewriteRouterクラス
もう1つのRouterとしてZend_Controller_RewriteRouterクラスが用意されています。こちらのRouterは自由にルーティング制御を定義できる半面、コーディング量が増えます。 例えば、Zend_Controller_Routerクラスと同様のルーティングをしたい場合、リスト2のように記述します。Zend_Controller_RewriteRouterでは、定義したいルートごとにaddRouteメソッドを使用して設定し、リスト2は「:controller/:action」のルートを設定しています。先頭に「:」をつけることで変数として解釈されますが、「:controller」と「:action」は予約語として定義されており、そのままAction ControllerとActionメソッドの名称として解釈されます。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
また、リスト2ではsetRewriteBaseによってルートディレクトリを指定*しています(デフォルトでルートディレクトリを検知するためこの指定は必須ではありません)。注意すべき点としては、Zend_Controller_Routerクラスのように、キーを後ろにつなげるルーティングはサポートされていないことです。このため、Zend_Controller_Routerクラスを使用したアプリケーションをそのままZend_Controller_RewriteRouterクラスへ移行することはできません。現状では、用途に応じて使い分けるのが良いでしょう。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
このページで出てきた専門用語
setRewriteBaseによってルートディレクトリを指定
ディレクトリを移動する場合の依存性となるため、このメソッドは指定しないように推奨されている。
Copyright © ITmedia, Inc. All Rights Reserved.