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

7.2.1. 導入

Zend_Controller システムは、拡張性を考慮して作成されています。 拡張方法としては、既存のクラスを継承する以外にも、 コントローラファミリを構成するさまざまなインターフェイスや抽象クラスを実装した 新しいクラスを作成する方法があります。

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

[注意] 起動用ファイルの場所

ドキュメントルートに配置する PHP ファイルは、 この起動用ファイルだけにしておくべきです。

Zend_Controller の基本機能として、クエリパラメータを含む URL もサポートしています。たとえば index.php?controller=foo&action=bar のような形式です。 さらに、同梱されているもうひとつのルータである Zend_Controller_RewriteRouter は、多くの環境で (mod_rewrite 的な機能を持たない環境でも) 動作します。 mod_rewrite を使用できない場合でも、あなたのサイトで Zend_Controller を使用することが可能です。

7.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() をコールして設定することができます。

7.2.4. ディレクトリ構造

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

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

/application
  /models
  /views
  /controllers
/document_root
  /images
  /styles
  .htaccess
  index.php
/library
  /Zend
[注意] 注意

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

7.2.5. デフォルトのコントローラ

デフォルトのコントローラは、必ず指定しなければなりません。 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('/');
    }
}

?>

デフォルトのコントローラおよびアクションについての詳細、 そしてアクションコントローラクラスの作成方法については 後の章で説明します。

[注意] 注意

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