|
|
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/ ディレクトリに設定します。
上のレイアウトの html/.htaccess ファイルを、次のように編集します。
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
注意: mod_rewrite について
上のリライトルールは、バーチャルホストのドキュメントルート配下にある すべてのファイルへのアクセスを許可するものです。 この方式で公開してしまってはまずいファイルがある場合は、 このルールにさらに制約を追加しなければなりません。 Apache のウェブサイトにいけば、 » mod_rewrite について もっと詳しく知ることができます。
IIS 7.0 をお使いの場合は、次のような rewrite 設定を使用します。
このルールは、既存のリソース (シンボリックリンク、空でないファイル、あるいは空でないディレクトリ) へのリクエストを適切に転送し、 それ以外のすべてのリクエストをフロントコントローラに転送します。
注意:
上の rewrire ルールは Apache 用のものです。 その他のウェブサーバ用の例については ルータのドキュメント を参照ください。
起動ファイルとはすべてのリクエストの転送先となるファイルのことで、 今回の例では html/index.php がそれにあたります。 html/index.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 を開き、次の内容を入力しましょう。
/** Zend_Controller_Action */
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 を入力してみましょう。
My first Zend Framework App Hello, World!
デフォルトで、 エラーハンドラプラグイン が登録されています。 このプラグインを使用するには、エラー処理用のコントローラが必要です。 デフォルト設定では、デフォルトモジュールの ErrorController に errorAction() というメソッドがあることを想定しています。
class ErrorController extends Zend_Controller_Action
{
public function errorAction()
{
}
}
先ほど説明したディレクトリ構成により、このファイルは application/controllers/ErrorController.php に配置されることになります。これとは別に、ビュースクリプト application/views/scripts/error/error.phtml が必要です。その中身は、たとえば次のようになるでしょう。
エラー エラーが発生しました
エラーが発生しました。後ほどもう一度お試しください。
ここまでくれば、実際にブラウザでサイトを表示してみることができます。 あなたのドメインが example.com だとすると、 以下のいずれかの URL で先ほど作成したページが表示されることでしょう。
http://example.com/
http://example.com/index
http://example.com/index/index
これで、実際にコントローラやアクションを作成する準備ができました。 おめでとうございます!
|
|
Copyright © 2005-2011 Zend Technologies Inc (compiled by mikaelkael with ZFDocumentor - SVN 22750).

