目次
Zend_Controller
は、Zend Framework の MVC
システムの中心となるものです。MVC は モデル-ビュー-コントローラ
の頭文字をとったもので、アプリケーションのロジックと表示ロジックを分離させる設計手法です。
Zend_Controller_Front
は
フロントコントローラ パターンを実装しており、
すべてのリクエストをいったんフロントコントローラで受け取った上でその
URL にもとづいたアクションコントローラに配送します。
Zend_Controller
は、拡張性を考慮して作成されています。
拡張の方法としては、既存のクラスのサブクラスを作成する方法と
アクションヘルパーを作成する方法があります。
新しいサブクラスを作成すると、コントローラクラスの基盤となる
インターフェイスや機能を新たに書くことができます。
アクションヘルパーを使用すると、システムの機能を強化したり変更したりできるようになります。
より詳しい情報が知りたい場合は、次のセクションを参照ください。 とりあえず動かしてみたいという方は、ここを読むといいでしょう。
まずはディレクトリ構成を決めましょう。 典型的なレイアウトは、次のようなものです。
application/ controllers/ IndexController.php models/ views/ scripts/ index/ index.phtml helpers/ filters/ html/ .htaccess index.php
上のレイアウトの html/.htaccess
ファイルを、次のように編集します。
RewriteEngine on RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php
このルールは、リソース (画像やスタイルシート) 以外のすべてのリクエストをフロントコントローラに転送します。 これ以外にもフロントコントローラにまわしたくない拡張子がある場合 (PDF やテキストファイルなど) は、その拡張子を追加するなり rewrite ルールを独自に作成するなりしましょう。
注意 | |
---|---|
上の rewrire ルールは Apache 用のものです。 その他のウェブサーバ用の例については ルータのドキュメント を参照ください。 |
起動ファイルとはすべてのリクエストの転送先となるファイルのことで、
今回の例では html/index.php
がそれにあたります。
html/index.php
をお好みのエディタで開き、次の内容を追加します。
<?php require_once 'Zend/Controller/Front.php'; Zend_Controller_Front::run('/path/to/app/controllers');
これは、フロントコントローラのインスタンスとディスパッチを行います。 この結果、アクア本コントローラへリクエストが転送されます。
アクションコントローラについて説明する前に、まず
Zend Framework でのリクエストの処理方法について知っておきましょう。
デフォルトでは、URL パスの最初の部分がコントローラ、
そしてその次の部分がアクションに対応します。たとえば URL が
http://framework.zend.com/roadmap/components
である場合、パスは /roadmap/components
となり、これは roadmap
コントローラの
components
アクションに対応します。
アクションを省略した場合は index
アクションであるとみなされます。
またコントローラを省略した場合は index
コントローラであるとみなされます
(Apache が自動的に DirectoryIndex
に対応させるという規約に従っています)。
Zend_Controller
のディスパッチャは、
コントローラを対応するクラスに関連付けます。
デフォルトでは、コントローラ名の先頭を大文字にしたものに
Controller
をつなげたものがクラス名となります。
つまり、上の例では roadmap
コントローラが
RoadmapController
クラスに対応することになります。
同様に、アクションもコントローラクラスのメソッドに関連付けます。
デフォルトでは、アクション名を小文字に変換して
Action
を追加したものがメソッド名となります。
つまり、上の例では components
アクションは
componentsAction
メソッドになり、最終的に
RoadmapController::componentsAction()
がコールされることになります。
続いて、デフォルトのアクションコントローラと
アクションメソッドを作ってみましょう。
先ほど説明したように、デフォルトのコントローラ名およびアクション名はどちらも
index
となります。
application/controllers/IndexController.php
を開き、次の内容を入力しましょう。
<?php /** Zend_Controller_Action */ require_once 'Zend/Controller/Action.php'; class IndexController extends Zend_Controller_Action { public function indexAction() { } }
デフォルトでは
ViewRenderer
アクションヘルパーが有効になります。つまり、
アクションメソッドとそれに対応するビュースクリプトを用意すれば、
すぐにその内容をレンダリングできるというわけです。
デフォルトでは、MVCのビュー層として Zend_View
を使用します。
ViewRenderer
は、コントローラ名
(たとえば index
) とアクション名
(たとえば index
) から処理するテンプレートを決定します。
デフォルトでは、テンプレートの拡張子は
.phtml
となります。つまり、上の例では
index/index.phtml
をレンダリングします。
さらに ViewRenderer
は、
コントローラと同一階層にある views
ディレクトリを自動的にビューの基底ディレクトリとみなし、
views/scripts/
ビュースクリプトがおかれるものと考えます。
したがって、実際にレンダリングされるテンプレートは
application/views/scripts/index/index.phtml
となります。
先ほど説明したように、ビュースクリプトの場所は
application/views/scripts/
です。
デフォルトコントローラにおけるデフォルトのアクションのビュースクリプトは
application/views/scripts/index/index.phtml
となります。このファイルを作成し、何か HTML を入力してみましょう。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>My first Zend Framework App</title> </head> <body> <h1>Hello, World!</h1> </body> </html>
デフォルトで、
エラーハンドラプラグイン が登録されています。
このプラグインを使用するには、エラー処理用のコントローラが必要です。
デフォルト設定では、デフォルトモジュールの
ErrorController
に errorAction
というメソッドがあることを想定しています。
<?php /** Zend_Controller_Action */ require_once 'Zend/Controller/Action.php'; class ErrorController extends Zend_Controller_Action { public function errorAction() { } }
先ほど説明したディレクトリ構成により、このファイルは
application/controllers/ErrorController.php
に配置されることになります。これとは別に、ビュースクリプト
application/views/scripts/error/error.phtml
が必要です。その中身は、たとえば次のようになるでしょう。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>エラー</title> </head> <body> <h1>エラーが発生しました</h1> <p>エラーが発生しました。後ほどもう一度お試しください。</p> </body> </html>