Zend_Applicationの設定
ここではアプリケーション全体や、ブートストラップに関する設定を行う方法について見ていきます。通常はこれは設定ファイル(application.ini)に記述していきます。
設定ファイルの与え方
設定ファイルの書き方を見る前に、どの設定ファイルをどのように使うかを指定する方法について見ていきます。これらはリスト2~3を見て分かるとおり、Zend_Applicationのコンストラクタで指定しています。では、ここで利用している定数APPLICATION_ENVやAPPLICATION_PATHはどこで設定し、どのような意味を持つ定数なのでしょうか?
APPLICATION_ENVとAPPLICATION_PATHはアプリケーションの管理を補助するための定数で、開発の段階やファイルの置いてある場所を指定しています(というわけで、これらZend_Applicationを利用するために絶対的に必要なものではないです)。
| 定数名 | 説明 | 標準の値 | 設定する場所 |
| APPLICATION_PATH | アプリケーションのファイルが設置されているディレクトリ | 「index.php」が置かれているディレクトリと親ディレクトリが共通な「application」という名前のディレクトリ | (明示的に指定せず、index.phpで自動的に判別) |
| APPLICATION_ENV | 設定ファイルのどの部分を利用するか | 「development」 | 「.htaccess」 |
APPLICATION_PATHは設定ファイルを含む、アプリケーションに関係するファイルが設定されているディレクトリを指定するためのものです。明示的に指定しなければ「index.php」が設置されているディレクトリから自動的に推定してくれます。
APPLICATION_ENVには、アプリケーションを動かしている環境(例えば「開発中=development」「実運用=production」等)を指定します。APPLICATION_ENVは通常はApacheの環境変数「APPLICATION_ENV」を経由して、「.htaccess」ファイルで
SetEnv APPLICATION_ENV development
のように指定します。
このAPPLICATION_ENVに応じて設定ファイルのどの部分が利用されるかも変化するので、開発・運用の段階に応じた設定の変更を変数の指定一つで変更することができます。
設定ファイルの中身
Zend_Applicationの設定は通常は設定ファイルに記述し、その設定ファイルをZend_Applicationのコンストラクタの2番目の引数として渡します。まず、標準の設定ファイルを見てみましょう(リスト4)。
[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
このapplication.iniは「production」「staging」「testing」「development」の4つのセクションがある、INI形式のファイルです。このうちの、どのセクションを利用するかは先程述べたアプリケーションを動かしている環境で指定します。現在指定されている環境は「development」なので、このファイルのうちの4つ目のセクションの設定が利用されます。
なお、この4つ目のセクションは[development : production]という形で宣言されています。これは「production(親セクション)」の内容を引き継ぎつつ設定の一部を上書きした「development(子セクション)」を宣言しているという表記になっています。つまり、ここで有効となる設定はリスト5のようになります。
[development] ;(productionから設定を引き継ぎ) includePaths.library = APPLICATION_PATH "/../library" bootstrap.path = APPLICATION_PATH "/Bootstrap.php" bootstrap.class = "Bootstrap" resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers" ;(developmentで設定を上書き) phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1
これらの設定は
「設定の名前」=「設定の値」
のような書式、ないし階層構造を持つ設定の場合には、
「設定の名前」.「設定の項目名1」.「設定の項目名2」...「設定の項目名」 = 「設定の値」
のような書式で記述します。
Zend_Applicationでは設定ファイルを読み込むのにZend_Configを利用しています。そのため、上の例のようなINI形式のファイルだけでなく、XML形式でも設定を記述することができます。ただし、Zend Frameworkはバージョン1.8系まではXMLファイル内で記述された設定ファイルにPHPの定数を埋め込む方法がなかったため、INI形式を利用するのが普通でした。
Zend Framework1.9系からは、PHPの定数をXMLで記述した設定ファイルから参照できるようになりました。これには、次のように「http://framework.zend.com/xml/zend-config-xml/1.0/」名前空間の「const」タグを利用します。
(INIファイル) [production] ... resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers" ... [development : production] ...
▼
(XMLファイル)
<?xml version="1.0"?>
<config xmlns:zf="http://framework.zend.com/xml/zend-config-xml/1.0/">
<configdata>
<production>
<resources>
<frontController>
<controllerDirectory>
<zf:const zf:name="APPLICATION_PATH"/>/controllers</controllerDirectory>
</frontController>
</resources>
</production>
...
<development zf:extends="production">
</development>
</configdata>
それでは、各設定の意味について説明していきます。
設定できる内容
Zend_Applicationで設定するべき値には大きく分けて、Zend_Application本体で処理するものと、Zend_Application_Bootstrap内で処理するものと2種類あります。
| 分類 | 設定の名前 | 説明 |
| Zend_Application本体 | phpSettings | php全体の設定 |
| includePaths | phpのinclude_pathに追加するディレクトリを指定 | |
| autoloaderNamespaces | Zend Frameworkのクラス自動ロードで、自動的に読み込むクラスの名前空間を登録 | |
| bootstrap | ブートストラップクラスの指定 | |
| Zend_Application_Bootstrap | resources | リソースプラグインの設定 |
| set(プロパティ名) | (プロパティ名)のプロパティの値を設定 | |
| pluginpaths | 指定されたプレフィックスに指定されたパスを割り当てる |
Zend_Application本体で処理するものは、アプリケーション全体の処理に関するものが大部分です。このうち「autoloodareNamespaces」はZend Frameworkのクラス自動読み込み機構に関するもので、明示的にrequireしなくても読み込むクラスの名前を指定しています(ちなみに、何も指定していない状態では「Zend_」および「ZendX_」から始まるクラス名が自動読み込みの対象となります)。
また、bootstrapはブートストラップクラスを指定するためのもので、ブートストラップクラスのクラス名を指定する「class」と、そのクラスが格納されているファイル「path」を指定します。なお、このpathはリスト4にある通り、通常は定数APPLICATION_PATHを利用して宣言します。
Zend_Application_Bootstrapで処理するものは、主にブートストラップ時に行う処理に関するもので、利用するリソースプラグインやブートストラップクラスのプロパティを指定することができます。また、(Zend Framework標準添付ではなく)追加のプラグインを利用したい場合の、その追加したプラグインが置かれているディレクトリを指定することもできます。
この中でもよく使うと思われるいくつかについて説明します。
(1)phpSettings
php.iniに書くような設定を記述します。例えばphp.iniに
display_errors = 0
と記述したい場合に、代わり設定ファイルに
phpSettings.display_errors = 0
と記述することができます。
内部ではPHPの関数ini_setを呼び出しているため、ini_setで変更できる項目のみ変更できます(詳細に関してはini_setのマニュアルも参照してください)。
(2)bootstrap
ブートストラップクラスの名前と記述されているファイル名を指定します。この設定はクラスの名前を指定する項目(class)とファイル名を指定する項目(path)の2つの項目を指定する必要があります。
(3)resources
利用するリソースプラグインに関する設定を行います。設定の書式は
「resources」.「(リソースプラグイン名)」.「項目名」...「項目名」 = 値
のようになります。
なお、ここで指定されないリソースプラグインは利用されません(つまり、プラグインに関連付けられたリソースも生成されません)。Zend_Applicationクラスのrunメソッドからは、このリソースプラグインを利用して作成されたフロントコントローラーにディスパッチされるので、最低でもフロントコントローラーに関するリソースの設定を行う必要があります。
