Zend_Controller
システムは、拡張性を考慮して作成されています。
拡張方法としては、既存のクラスを継承する以外にも、
コントローラファミリを構成するさまざまなインターフェイスや抽象クラスを実装した
新しいクラスを作成する方法があります。
Zend_Controller は、クリーンな (クエリ文字列をほとんど使用しない) URI
をサポートするように作成されています。この推奨設定を使用するためには、ウェブサーバが
URI の書き換えをサポートしており、全てのリクエストを単一のファイル
(ここでは "index.php" とします。これは単に
Zend_Controller_Front
を呼び出すだけです)
にリダイレクトできなければなりません。
Apache では、この機能はオプションのモジュール mod_rewrite でサポートされています。
サーバを設定するための第一歩は、まずきちんとインストールして mod_rewrite を有効にすることです。次に、.htaccess と index.php の 2 つのファイルをドキュメントルートに配置します。 .htaccess は Apache が使用するファイルで、 すべてのリクエストを index.php にリダイレクトさせるための mod_rewrite のルールをここに記述します。開発中なら、 特定の拡張子のファイル以外をすべて index.php にリダイレクトさせるような単純なルールを設定しておけばよいでしょう。 例えばこのようになります。
RewriteEngine on RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php
上の例では、指定した拡張子以外のすべてのファイルに対するリクエストが index.php に渡されます。開発中にはこれで十分ですが、 実運用環境では、リダイレクトしないディレクトリを指定するなどの記述が必要でしょう。
起動用ファイルの場所 | |
---|---|
ドキュメントルートに配置する PHP ファイルは、 この起動用ファイルだけにしておくべきです。 |
Zend_Controller の基本機能として、クエリパラメータを含む URL
もサポートしています。たとえば
index.php?controller=foo&action=bar
のような形式です。
さらに、同梱されているもうひとつのルータである
Zend_Controller_RewriteRouter
は、多くの環境で (mod_rewrite 的な機能を持たない環境でも) 動作します。
mod_rewrite を使用できない場合でも、あなたのサイトで
Zend_Controller を使用することが可能です。
.htaccess ファイルの設定が終われば、次に index.php
という新しいファイルを作成します。これが起動用ファイルとなります。
index.php は、単に Zend_Controller_Front を起動するためだけに使用します。
Zend_Controller_Front はドキュメントルートの外に配置します。
注意 | |
---|---|
ドキュメントルートに配置する PHP ファイルは、 この起動用ファイルだけにしておくべきです。 |
セキュリティ上、他の PHP ファイルはウェブサーバからアクセスできない場所 (ドキュメントルートの配下ではない場所) に置くことを Zend として強く推奨します。 共有ホスティング環境など思い通りにいかない環境もあることは理解しますが、 可能な限り推奨設定に従うようにしてください。
Zend_Controller_Front を起動するための起動用ファイル
index.php
をドキュメントルートに作成します。
<?php require_once 'Zend/Controller/Front.php'; Zend_Controller_Front::run('/path/to/your/controllers'); ?>
/path/to/your/controllers
の部分に関しては、次の節を参照ください。
README.txt
に記述されているように、
Zend Framework ライブラリのディレクトリは include_path
に置かなければなりません。include_path
が php.ini
で設定されていない場合は、このファイルで require_once()
する前に set_include_path()
をコールして設定することができます。
Zend Framework で構築したウェブサイトは、 共通のディレクトリ構造を共有することを推奨します。 すべてとは言いませんが、できるだけこの構造にあわせるようにしましょう。 そうすることで、Zend Framework の規約に慣れている人々にとって、 あなたのコードがより理解しやすいものとなります。
推奨する構造は、(Zend およびその他の) ライブラリ用のディレクトリと アプリケーションのディレクトリを別に分けるものです。
/application /models /views /controllers /document_root /images /styles .htaccess index.php /library /Zend
注意 | |
---|---|
この節は未完成です。現在作成中であり、今後変わる可能性があります。 |
デフォルトのコントローラは、必ず指定しなければなりません。 URI にコントローラが指定されなかった場合、例えば次のような URI が指定された場合に、このコントローラが使用されます。
http://framework.zend.com/
初期設定では、デフォルトのコントローラは
IndexController
という名前のクラスで、
IndexController.php
というファイルで定義されなければなりません。
内部的には、これは 'index' コントローラとして参照されます。
フロントコントローラでのディスパッチに先立ってデフォルトのコントローラを変更するには、
フロントコントローラあるいはディスパッチャオブジェクトで
setDefaultController()
メソッドをコールします。
その際には、内部の命名規約を使用します。つまり、クラス
HomeController
(ファイル HomeController.php
に記述されたもの) を参照するには home
と指定します。
コントローラは Zend_Controller_Action
クラスをを継承し、コントローラのディレクトリになければなりません。
<?php require_once 'Zend/Controller/Action.php'; class IndexController extends Zend_Controller_Action { public function indexAction() { echo 'IndexController からこんにちは'; } public function noRouteAction() { $this->_redirect('/'); } } ?>
デフォルトのコントローラおよびアクションについての詳細、 そしてアクションコントローラクラスの作成方法については 後の章で説明します。
注意 | |
---|---|
この節は未完成です。現在作成中であり、今後変わる可能性があります。 |