Zend_Application_Module_Autoloaderで、モジュールロードを手っ取り早く(デフォルトにそって)やる場合のメモ
よく知られているとおりZFはフォルダ構造の締め付けが弱くうんぬんの話はさておいて、よく知られているとおり1.8は一つのZFのターニングポイント。。(以下省略)
さて、ZFのtrunkではZend_Loader_Autoloadが用意されています。
Zend_Loader_Autoloader_Interfaceの実装Zend_Loader_Autoloader_Resourceによって、
リソースのオートローディングが可能になります。
<?php set_include_path('../library'.PATH_SEPARATOR.get_include_path()); require_once 'Zend/Loader/Autoloader.php'; require_once 'Zend/Loader/Autoloader/Resource.php'; $loader = new Zend_Loader_Autoloader_Resource(array( 'namespace' => 'Diggin', 'basePath' => dirname(__FILE__).'/modules/diggin/', )); $loader->addResourceType('Model', 'models', 'Model'); // application/modules/diggin/models/Scraper.phpなどにて下記クラス名モデル定義 var_dump(new Diggin_Model_Scraper()); //autoloadされる
上記のZend_Loader_Autoloader_Resourceの継承Zend_Application_Module_Autoloaderでは、
dbtable,form,model,plugin,apiについてリソースタイプとパスが用意されています。
<?php /** * Resource loader for application module classes * * @uses Zend_Loader_Autoloader_Resource * @package Zend_Application * @subpackage Module * @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com) * @license New BSD {@link http://framework.zend.com/license/new-bsd} */ class Zend_Application_Module_Autoloader extends Zend_Loader_Autoloader_Resource { /** * Constructor * * @param array|Zend_Config $options * @return void */ public function __construct($options) { parent::__construct($options); $this->initDefaultResourceTypes(); } /** * Initialize default resource types for module resource classes * * @return void */ public function initDefaultResourceTypes() { $basePath = $this->getBasePath(); $this->addResourceTypes(array( 'dbtable' => array( 'namespace' => 'Model_DbTable', 'path' => 'models/DbTable', ), 'form' => array( 'namespace' => 'Form', 'path' => 'forms', ), 'model' => array( 'namespace' => 'Model', 'path' => 'models', ), 'plugin' => array( 'namespace' => 'Plugin', 'path' => 'plugins', ), 'api' => array( 'namespace' => 'Api', 'path' => 'apis', ), )); $this->setDefaultResourceType('model'); } }
なのでタイトルに書いたとおりモジュールロードを手っ取り早く(デフォルトにそって)やる場合は下記のとおりのようです。
<?php set_include_path('../library'.PATH_SEPARATOR.get_include_path()); require_once 'Zend/Loader/Autoloader.php'; require_once 'Zend/Application/Module/Autoloader.php'; $loader = new Zend_Application_Module_Autoloader(array( 'namespace' => 'Diggin', 'basePath' => dirname(__FILE__).'/modules/diggin/', )); // application/modules/diggin/models/Scraper.phpにて下記クラス名モデル定義 var_dump(new Diggin_Model_Scraper()); //autoloadされる