Zend Frameworkメモ2

id:da-yoshi:20080212:1202772305で初期化に利用したZend_Controller_Frontクラスですが、これって流れるようなインターフェイスに対応しているのですね。こういう初期化設定をするときには、便利な機能なので、早速使ってみました。

<?php

ZendInit::init(
	'/Users/hidenoshin/Documents/workspace/zend',
	'/Users/hidenoshin/ZendFramework-1.5.0PR/library');

class ZendInit {
	
	public function init($appRoot, $zendRoot, $type = 'development') {
		set_include_path(get_include_path() . PATH_SEPARATOR . $appRoot . '/lib' . PATH_SEPARATOR . $zendRoot);
		require_once 'Zend/Controller/Front.php';
		require_once 'Zend/Config/Ini.php';
		require_once 'Zend/Db/Table/Abstract.php';
		require_once 'Zend/Layout.php';
		require_once 'My/Plugin.php';

		$config = new Zend_Config_Ini($appRoot . '/config/config.ini', $type);
		
		$db = Zend_Db::factory($config->database);
		Zend_Db_Table_Abstract::setDefaultAdapter($db);
		
		Zend_Layout::startMvc(array('layoutPath' => $appRoot . '/layout'));
		
		$front = Zend_Controller_Front::getInstance()
			->setParam('appRoot', $appRoot)
			->setParam('config', $config)
			->addModuleDirectory($appRoot . '/modules')
			->registerPlugin(new My_Plugin())
			->getRouter()->addConfig($config, 'routes')->getFrontController()
			->dispatch();		
	}
}

?>

かなりすっきりしました。あと、ついでに環境依存のパラメータを引数にしてみました。
FWの拡張ってライブラリクラスに対する継承を使いがちになることが多いのですが、ZFの場合はPluginが充実しているので、JavaでいうAOPの感覚で処理を追加・変更していけるのが自分的にはポイント高いです。カスタマイズ前提のFWは、如何に簡単にわかりやすく設定が出来るかが鍵になると思うのですが、ZFは前提知識がほとんど無くても使い始めることができる上、いろいろ設定しても整理された状態で管理することが出来ます。Railsのように初期設定がほとんどいらないオールインワンもいいですが、そういうRails的な機能を学んだ上でこのZFのようなカスタマイズ性が高いFWを使うというのが、実は現実的なのかなという気がしてきました。