復習の意味も込めて、Zend_Controllerについて。 Zend Frameworkのリファレンスガイドとソースコードを参考に書いていきます。 Zend_ControllerはZendFrameworkでのMVCモデルの根幹をなす部分で、フロントコントローラパターンを実装しています。 フロントコントローラパターンでは、リクエストをいったんフロントコントローラであるZend_Controller_Frontで受け取り、URLにもとづいて対応するアクションコントローラー(Zend_Controller_Actionを継承したクラス)のアクション(コントローラ内のメソッド)に処理を割りあてます。 アクションコントローラーはXxxController.php(最初の文字は大文字です)というファイルに、XxxControllerという名前で、Zend_Controller_Actionを継承したクラスを定義したものです。 アクションはアクションコントローラー内にyyyActionという名前で定義されているpublic メソッドです。``` // XxxController.phpの内容 require_once ‘Zend/Controller/Action.php’;

class XxxController extends Zend_Controller_Action { public function yyyAction() { } }

たとえば以下のようなURLにリクエストがあったとします。 http://exapmle.com/foo/bar

この場合は、まずフロントコントローラで処理を受け取り、FooConroller.php内のFooControllerというクラスの、barAction()というメソッドが実行されます。ちなみに、コントローラー名が省略された場合にはindexコントローラーであるとみなされ、アクション名が省略された場合は同様にindexアクションであるとみなされます。 以下で、Hello Worldを出力するシンプルなアプリケーションの作成例を書きます。 今回は以下のようにアプリケーションを配置すると仮定し、http://localhost/ にアクセスした場合の例を書きます。 htdocs/ ├ application/ │ ├ controllers/ │ ├ models/ │ └ views/ │ ├ index.php └ .htaccess すべてのリクエストは一度フロントコントローラで受け取ります。今回この役割を果たすのは、htdocs直下にあるindex.phpです。 このPHPファイルにリクエストをまとめるために、apacheのmod\_rewriteを用いてURLを書き換えます。もし、apacheのmod\_rewriteが有効になっていない場合は有効にしておいてください。設定が有効になっていることを確認したら、.htaccessに以下のような記述を追加します。 RewriteEngine on RewriteRule !.(js|ico|gif|jpg|jpeg|png|css)$ index.php これは画像やスタイルシートへのリクエスト以外を、フロントコントローラ(htdocs/index.php)へ向けるための設定です。ここで設定した拡張子以外でもフロントコントローラへ処理をまわしたくないものがあれば、その拡張子を追加してください。 続いて、フロントコントローラの役割を果たすindex.phpの内容を以下のように書きます。 require_once ‘Zend/Controller/Front.php’; Zend_Controller_Front::run(‘application/controllers’); Zend\_Controller\_Front::run()の引数部分には、コントローラのあるディレクトリまでのパスを書きます。 これでリクエストされたurlに対応したコントローラのアクションへ処理が渡されます。 今回は、http://localhost/にアクセスする例ですが、このURLはコントローラー名とアクション名が省略されています。 上でも述べましたが、コントローラ名とアクション名が省略された場合は、それぞれindexという名前のものが割り当てられます。 今回の場合は、htdocs/application/controllers/IndexController.php のファイルに定義されている、IndexControllerクラスのindexAction() という関数が実行されます。 続いてコントローラを作成します。 htdocs/application/controllers ディレクトリ以下にIndexController.phpというファイルを作って、以下のように書きます。 require_once ‘Zend/Controller/Action.php’;

class IndexController extends Zend_Controller_Action { public function indexAction() { } }

とりあえすこれだけで大丈夫です。 Zend\_Controllerでは、デフォルトでViewRendererというアクションヘルパーが有効になっているため、アクションメソッドに対応するビューを用意するだけで、自動的にページを描画してくれます。 呼び出されるビューは、デフォルトではviewsフォルダ以下のscripts/コントローラー名/アクション名.phtmlという、phtmlファイルになります。 今回の例だと、views/scripts/index/index.phtmlというファイルになります。 ビューファイル(views/scripts/index/index.phtml)に以下のように記述します。 < !DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

My first Zend Framework App

Hello, World!

これで準備は完了です。 http://localhost/ http://localhost/index http://localhost/index/index