ZendFrameworkもリリースから随分たちますので、随分と機能追加や改良が進んでいます。有用なコンポーネントが多数導入され、それらを自由に利用できるのはとても魅力的です。反面、自由度が高いために設計、実装によって大きな差が出やすいフレームワークだとも言えます。
機能に関しては充実したマニュアルがありますので、今回は利用方法の部分、中でも起動方法で改善できる部分を取り上げてみます。
rewrite ルールについて
初期のころの拡張子によって振り分ける記述から、ファイルの有無によってrewriteさせる方法に移っています。拡張子を指定するよりも信頼度が高く、必要があればZFのコントローラーを使用しないページも共存出来るため、より良い方法だと思います。
[Zend Framework: Documentation]
http://framework.zend.com/manual/ja/zend.controller.html#zend.controller.quickstart.go.rewrite
起動方法について
公開領域にあり、システム情報が流出する恐れや、オブジェクト指向の原則である情報のカプセル化を妨げていた、これまでのindex.phpで設定しディスパッチする起動方法に対しては、下記の様な改善方法が提案されています。
[Official ZF QuickStart Draft]
http://framework.zend.com/wiki/display/ZFDEV/Official+ZF+QuickStart+Draft
[起動ファイルのコードのスコープ]
http://tdiary.ishinao.net/20070606.html#p01
[ZendFrameworkのindexにあるグローバルな奴らを考える]
http://blog.wozozo.org/archives/95
まとめ
私が開発する際は、上記の様なことを踏まえて現在は下記の様にしている事が多いです。Bootstrapという静的な関数のみのクラスを作成し環境判別や必要な処理を関数にして実行させています。index.phpに直接記述するよりも見通しも良くなったかなと思います。他にももっと良く出来るところがあれば指摘して頂けると有難いです。
■ファイル配置
/application/modules/
/application/modules/default/controllers/
/application/modules/default/models/
/application/modules/default/views/
/application/Bootstrap.php
/htdocs/index.php
■/htdocs/index.php
include '../application/Bootstrap.php';
Bootstrap::run();
■/application/Bootstrap.php
class Bootstrap
{
/**
* 環境判別 [本番=true]
*
* @var boolean
*/
private static $_isProduct = false;
/**
* 本番のパス
*
* @var string
*/
private static $_product = '/path/to/app';
/**
* 起動時のパス
*
* @var string
*/
private static $_baseDir = '';
/**
* 実行
*
* @return void
*/
public static function run()
{
// 環境判別
self::$_baseDir = realpath(dirname(__FILE__).'/../../');
self::$_isProduct = (self::$_baseDir === self::$_product);
// 設定ファイル読み込み
$confFile = (self::$_isProduct) ? 'product.php' : 'staging.php';
include self::$_baseDir.'/config/'. $confFile;
// 必要な処理
}
}