4.2. さあ、はじめましょう

4.2.1. 導入

Zend_Controller システムは、拡張性を考慮して作成されています。 拡張方法としては、既存のクラスを継承する以外にも Zend_Controller_Router_Interface および Zend_Controller_Dispatcher_Interface を実装した新しいクラスを作成する方法があります。

4.2.2. サーバの設定

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 に渡されます。開発中にはこれで十分ですが、 実運用環境では、リダイレクトしないディレクトリを指定するなどの記述が必要でしょう。

4.2.3. 起動用ファイル

.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_pathphp.ini で設定されていない場合は、このファイルで require_once() する前に set_include_path() をコールして設定することができます。

[注意] 注意
mod_rewrite を必要としない手法については現在調査中です。 mod_rewrite の機能を使用する方法と使用しない方法の両方を提示できるようにするつもりです。 また、この仕組みは決して Apache や mod_rewrite 特有の機能にとらわれたものではないことにも注意しましょう。 同じようなリダイレクトの仕組みを持っているウェブサーバでも使用可能です。

4.2.4. ディレクトリ構造

Zend Framework で構築したウェブサイトは、 共通のディレクトリ構造を共有することを推奨します。 すべてとは言いませんが、できるだけこの構造にあわせるようにしましょう。 そうすることで、Zend Framework の規約に慣れている人々にとって、 あなたのコードがより理解しやすいものとなります。

推奨する構造は、(Zend およびその他の) ライブラリ用のディレクトリと アプリケーションのディレクトリを別に分けるものです。

/application
  /models
  /views
  /controllers
/document_root
  /images
  /styles
  .htaccess
  index.php
/library
  /Zend

[注意] 注意
この節は未完成です。現在作成中であり、今後変わる可能性があります。

4.2.5. IndexController

IndexController という名前のコントローラを、 すべてのサイトで定義しなければなりません。 URI にコントローラが指定されなかった場合、例えば次のような URI が指定された場合に、このコントローラが使用されます。

http://framework.zend.com/

IndexController クラスは、コントローラのディレクトリにある IndexController.php という名前のファイルで定義されていなければなりません。 IndexController は、Zend_Controller_Action を継承しなければなりません。IndexController の例は、このようになります。

<?php
				
require_once 'Zend/Controller/Action.php';

class IndexController extends Zend_Controller_Action 
{
	public function indexAction()
	{
		echo 'IndexController からこんにちは';
	}

	public function noRouteAction()
	{
		$this->_redirect('/');
	}
}

?>

[注意] 注意
この節は未完成です。現在作成中であり、今後変わる可能性があります。