Zend_Application を使う

Zend_Application は DI コンテナで高度に抽象化された (ry


オフィシャルのドキュメントでは設定ファイルに依存するような値を書いて、 Zend_Application を生成する際に設定ファイルを渡してやってる。
ディレクトリ構成は以下のような感じにしたい。

 app
   |-- Gene.php
   |-- configs
   |   `-- app.ini
   |-- modules
   |  `-- index
   |      |-- controllers
   |      |-- services
   |      `-- models
   |-- layouts      
   |-- locale
   `-- views
       |-- helpers
       `-- scripts
            `-- index
                `-- index
                    `-- index.phtml

ブートストラップ自体は library の下に Gene_Bootstrap と置く事にして、 Gene.php はそれを呼ぶ。

Autoloader の設定

ソースを読んだ限り、設定ファイル (app.ini) には名前空間のみしか設定できないよう。
setFallbackAutoloader() や suppressNotFoundWarnings() を設定したい場合は以下のようにすると出来る。

<?php
$app = new Zend_Application(
    $env,
     '/path/to/app/config/app.ini'
 );
$autoloader = $app->getAutoloader();
$autoloader->setFallbackAutoloader(true)
     ->suppressNotFoundWarnings(false);

$app->bootstrap()->run();

こんな感じで bootstrap() を呼ぶ前に設定してやる。

モジューラーディレクトリ構成を使いたい

設定ファイルに以下の様に書く。

resources.frontcontroller.moduledirectory = GENE_APP_PATH"/modules"
resources.frontcontroller.defaultmodule     = "index"

これは

<?php
$front->setDefaultModule('index')
           ->addModuleDirectory(GENE_APP_PATH . '/modules');

と同じ。
とりあえずこれでモジューラーディレクトリ構成が使えるようになった。


設定ファイルに書くだけで依存関係を解消できる。
ドキュメントのサンプルでは application.ini に セッションの設定値や DB の設定値をつらつらと書いているけど、個人的にはセッションはセッションで、 DB は DB で分けたい。
DB にしてもサンプルでは一台だけの想定のようだし。
2 台に接続とかなると結局 _initDb() みたいなのにつらつら書く必要がある。


ちなみに _initHoge() とかは書いた順番に実行されていくよう。
ドキュメントを見ると

To bootstrap the _initFoo() and _initBar() methods, do the following:

$bootstrap->bootstrap(array('foo', 'bar));

To bootstrap all resource methods, call bootstrap() with no arguments:

$bootstrap->bootstrap();
http://framework.zend.com/manual/ja/zend.application.theory-of-operation.html

ってなってるけど、 Zend_Application の bootstrap() は

<?php
/**
  * Bootstrap application
  *
  * @return Zend_Application
  */
public function bootstrap()
{
    $this->getBootstrap()->bootstrap();
    return $this;
}

ってなってる。
これって

<?php
public function bootstrap($resource = null)
{
    $this->getBootstrap()->bootstrap($resource);
    return $this;
}

じゃないのは何か理由があんのかな。
Zend_Application の bootstrap() は _init なんちゃらを全部動かすよーっていう意味合いなんだろうか。