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される