ZF:如何为映射器或模型设置自己的目录?

时间:2011-03-15 11:34:30

标签: php zend-framework module path model

我的应用程序如下:

/application/
     configs/
     layouts/
     modules/
        default/
            controllers/
            models/
               model1.php
            mappers/
               table1.php
            views/
        somemodule/
            controllers/
            models/
               model2.php
            mappers/
               table2.php
            views/

问题是如何设置像模型一样的映射器的路径?

如果我们使用Somemodule_Model_model2。有用。 但是如果我们使用Somemodule_Mappers_table2。它没有。

2 个答案:

答案 0 :(得分:1)

您是否正确引导模块?

<?php

class ModuleName_Boostrap extends Zend_Application_Module_Bootstrap {

    protected function _initAutoloader() {
        $default_loader = new Zend_Application_Module_Autoloader(array(
             'namespace' => $this->getModuleName().'_',
             'basePath'  => MODULE_PATH.'/'.$this->getModuleName()
        ));
    }

}

这将调用initDefaultResourceTypes()来设置您的映射器目录。

答案 1 :(得分:1)

这已在模块引导程序调用的Zend_Application_Module_Autoloader中为您完成。您可以在此处查看为自动加载注册的所有资源:

/**
 * 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',
        ),
        'mappers' => array(
            'namespace' => 'Model_Mapper',
            'path'      => 'models/mappers',
        ),
        'form'    => array(
            'namespace' => 'Form',
            'path'      => 'forms',
        ),
        'model'   => array(
            'namespace' => 'Model',
            'path'      => 'models',
        ),
        'plugin'  => array(
            'namespace' => 'Plugin',
            'path'      => 'plugins',
        ),
        'service' => array(
            'namespace' => 'Service',
            'path'      => 'services',
        ),
        'viewhelper' => array(
            'namespace' => 'View_Helper',
            'path'      => 'views/helpers',
        ),
        'viewfilter' => array(
            'namespace' => 'View_Filter',
            'path'      => 'views/filters',
        ),
    ));
    $this->setDefaultResourceType('model');
}

您只需要将“resources.modules [] =”添加到application.ini并将Bootstrap.php放在模块目录中(例如目录):

class Catalog_Bootstrap extends Zend_Application_Module_Bootstrap
{
   //just empty bootstrap class. resource init handled by parent 
}

注意:资源将以模块名称为前缀 示例:Catalog_Model_Mapper_Mapper1将位于%app%/ modules / catalog / models / mappers / Mapper1.php