# Zend_Application クイックスタート

`Zend_Application`で始める方法は2つあります、 そして、それらはプロジェクトを始める方法によって決まります。 いずれにせよ、どの場合も、`Bootstrap`クラスと関連する 構成ファイルを作成することから始めます。

プロジェクトを作成するために`Zend_Tool`を使う予定なら、 引き続き、下記をご覧下さい。 `Zend_Application`を既存のプロジェクトに追加するなら、 読み飛ばして先に進みたいことでしょう。

## Zend_Toolの利用

`Zend_Application`を使い始めるために最も早い方法は、 プロジェクトを生成するために`Zend_Tool`を使うことです。 これにより、`Bootstrap`クラスやファイルも生成されます。

プロジェクトを作成するために、(*nix システムで)`zf`コマンドを実行してください:

    % zf create project newproject

またはWindowsの`zf.bat`コマンド:

    C:> zf.bat create project newproject

共に、下記のようなプロジェクト構造を作成します:

    newproject
    |-- application
    |   |-- Bootstrap.php
    |   |-- configs
    |   |   `-- application.ini
    |   |-- controllers
    |   |   |-- ErrorController.php
    |   |   `-- IndexController.php
    |   |-- models
    |   `-- views
    |       |-- helpers
    |       `-- scripts
    |           |-- error
    |           |   `-- error.phtml
    |           `-- index
    |               `-- index.phtml
    |-- library
    |-- public
    |   `-- index.php
    `-- tests
        |-- application
        |   `-- bootstrap.php
        |-- library
        |   `-- bootstrap.php
        `-- phpunit.xml

上記の図の中で、ブートストラップは`newproject/application/Bootstrap.php`にあり、 最初は以下のように見えます:

    class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
    {
    }

構成ファイル、`newproject/application/configs/application.ini`にも気付くでしょう。 それは下記のような内容です:

    [production]
    phpSettings.display_startup_errors = 0
    phpSettings.display_errors = 0
    includePaths.library = APPLICATION_PATH "/../library"
    bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
    bootstrap.class = "Bootstrap"
    resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"

    [staging : production]

    [testing : production]
    phpSettings.display_startup_errors = 1
    phpSettings.display_errors = 1

    [development : production]
    phpSettings.display_startup_errors = 1
    phpSettings.display_errors = 1

この構成ファイルの設定は全て、 `Zend_Application`及びブートストラップで利用するためのものです。

他に興味を惹くファイルは `newproject/public/index.php`で、 それは`Zend_Application`を呼び出してディスパッチします。

    // アプリケーション・ディレクトリへのパスを定義します
    defined('APPLICATION_PATH')
        || define('APPLICATION_PATH',
                  realpath(dirname(__FILE__) . '/../application'));

    // アプリケーション環境を定義します
    defined('APPLICATION_ENV')
        || define('APPLICATION_ENV',
                  (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV')
                                             : 'production'));

    /** Zend_Application */
    require_once 'Zend/Application.php';

    // アプリケーション及びブートストラップを作成して、実行します
    $application = new Zend_Application(
        APPLICATION_ENV,
        APPLICATION_PATH . '/configs/application.ini'
    );
    $application->bootstrap()
                ->run();

クイックスタートを続けるには、 リソース節まで読み飛ばしてください。

## アプリケーションにZend_Applicationを追加する

`Zend_Application`の基本は本当に単純です:

- `Bootstrap`クラスを持つ `application/Bootstrap.php`ファイルを作成します。

- `Zend_Application`に必要な基本的な設定を持つ構成ファイル、 `application/configs/application.ini`を作成します。

- `Zend_Application`を利用するために、 `public/index.php`を変更します。

初めに、`Bootstrap`クラスを作成します。 `application/Bootstrap.php`ファイルを下記の内容で作成します。

    class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
    {
    }

次に、構成を作成します。 このチュートリアルではINI形式の構成を使います; もちろん、XML、JSON、YAMLや PHP構成ファイルも同様に利用できます。 `application/configs/application.ini`ファイルを作成して、 下記の内容にしてください:

    [production]
    phpSettings.display_startup_errors = 0
    phpSettings.display_errors = 0
    includePaths.library = APPLICATION_PATH "/../library"
    bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
    bootstrap.class = "Bootstrap"
    resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"

    [staging : production]

    [testing : production]
    phpSettings.display_startup_errors = 1
    phpSettings.display_errors = 1

    [development : production]
    phpSettings.display_startup_errors = 1
    phpSettings.display_errors = 1

次に入り口となるスクリプト、`public/index.php`を変更しましょう。 もしファイルが存在しなければ、作成してください; さもなければ、下記の内容でファイルを置き換えてください:

    // アプリケーション・ディレクトリへのパスを定義します
    defined('APPLICATION_PATH')
        || define('APPLICATION_PATH',
                  realpath(dirname(__FILE__) . '/../application'));

    // アプリケーション環境を定義します
    defined('APPLICATION_ENV')
        || define('APPLICATION_ENV',
                  (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV')
                                             : 'production'));

    // 一般的に、library/ ディレクトリーをinclude_pathに追加したいでしょう
    // 特にそれがインストールしたZFを含むならば
    set_include_path(implode(PATH_SEPARATOR, array(
        dirname(dirname(__FILE__)) . '/library',
        get_include_path(),
    )));

    /** Zend_Application */
    require_once 'Zend/Application.php';

    // アプリケーション及びブートストラップを作成して、実行します
    $application = new Zend_Application(
        APPLICATION_ENV,
        APPLICATION_PATH . '/configs/application.ini'
    );
    $application->bootstrap()
                ->run();

アプリケーション環境定数が環境変数 "APPLICATION_ENV" を探すことに気づくかもしれません。 我々は、これをウェブサーバ環境で設定することを勧めます。 Apacheでは、vhost定義、または、`.htaccess`ファイルのいずれかで設定できます。 我々は、`public/.htaccess`ファイルとして以下の内容を推奨します:

    SetEnv APPLICATION_ENV development

    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について学ぶ

上記の書き換えルールでは、バーチャル・ホスト・ドキュメント・ルートの配下の どのファイルでもアクセスが許可されます。 このように公開されたくないファイルがあるならば、より限定的なルールにしたいかもしれません。 mod_rewriteについてより学ぶ ためにはApache ウェブサイトを訪れてください。

ここまでで、 `Zend_Application`をすっかり利用し始められるようになっています。

## リソースの追加と作成

上記の手引きに従うと、ブートストラップ・クラスはフロントコントローラを利用します。 そして、それが動くとき、フロントコントローラをディスパッチします。 しかし、おそらく、これより少し多くの構成を必要とするでしょう。

この節では、アプリケーションにリソースを２つ追加することに目を向けましょう。 最初に、レイアウトを準備して、ビュー・オブジェクトをカスタマイズします。

`Zend_Application`で提供される標準的なリソースのうちの1つは、 「レイアウト」リソースです。 このリソースでは、`Zend_Layout`インスタンスを構成するために使う構成値を あなたが定義することをあてにしています。

これを使うためにすべきことは、構成ファイルを更新することです。

    [production]
    phpSettings.display_startup_errors = 0
    phpSettings.display_errors = 0
    bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
    bootstrap.class = "Bootstrap"
    resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
    ; ADD THE FOLLOWING LINES
    resources.layout.layout = "layout"
    resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"

    [staging : production]

    [testing : production]
    phpSettings.display_startup_errors = 1
    phpSettings.display_errors = 1

    [development : production]
    phpSettings.display_startup_errors = 1
    phpSettings.display_errors = 1

もしまだ無ければ、 `application/layouts/scripts/`ディレクトリ、 及びそのディレクトリ内に`layout.phtml`ファイルを作成してください。 以下の通りで、レイアウトを良く始められます。 （そして、それは次に含まれるビュー・リソースと結びつきます）:

    <?php echo $this->doctype() ?>
    <html>
    <head>
        <?php echo $this->headTitle() ?>
        <?php echo $this->headLink() ?>
        <?php echo $this->headStyle() ?>
        <?php echo $this->headScript() ?>
    </head>
    <body>
        <?php echo $this->layout()->content ?>
    </body>
    </html>

ここまでで、レイアウトを役立てられるようになっています。

次に、カスタム・ビューリソースを追加します。 ビューを初期化する際に、 HTML DocType及び HTMLの head で使用するタイトルのデフォルト値を設定を希望します。 これは、メソッドを追加する`Bootstrap`クラスを編集することにより成就できます:

    class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
    {
        protected function _initView()
        {
            // ビューを初期化します
            $view = new Zend_View();
            $view->doctype('XHTML1_STRICT');
            $view->headTitle('My First Zend Framework Application');

            // それを ViewRenderer に追加します
            $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper(
                'ViewRenderer'
            );
            $viewRenderer->setView($view);

            // ブートストラップで保存できるように返します
            return $view;
        }
    }

このメソッドはアプリケーションを起動する際に自動的に実行されて、 アプリケーションの必要性に従ってビューが初期化されることを確実にします。

## Zend_Applicationを使った次のステップ

上記は、`Zend_Application`で始めるようにさせるべきです。 そして、アプリケーション・ブートストラップを作成しだすべきです。 ここから、リソース・メソッドや、再利用性を最大にするために、リソース・プラグイン・クラスを作成し始めるべきです。 より学ぶために、引き続きご覧下さい！