0

我在 zf1 中使用模块化布局,我想为每个模块创建特定的库,如下所示:/application/modules/default/library

同时保持通用库仍然可用:/library

问题是我如何告诉 ZF 自动加载这些文件夹中的所有文件?我尝试在我的引导程序中使用 Zend_Loader_Autoloader_Resource 和以下代码

protected function _initLibrary()
{
    $resources = array(
        'basePath'          => APPLICATION_PATH . '/modules/default/library',
        'namespace'         => 'Default',
        'resourcesTypes'    => array(
            'Form' => array(
                'path'  => 'Form/',
                'namespace' => 'Form'
            )
        )
    );

    $resourceLoader = new Zend_Loader_Autoloader_Resource($resources);
}

我在 /application/modules/default/library/Form/AdminCreate.php 中创建了一个文件,其中包含一个扩展 Zend_Form 的类 Default_Form_AdminCreate。

但是,当我尝试创建此类的实例时,它失败了:致命错误:找不到类“Default_Form_AdminCreate”

这可以通过 Zend_Loader_Autoloader_Resource 实现还是我错过了什么?谢谢。

4

1 回答 1

0

我找到了一个可行的解决方案。我在这里发布它也许其他人需要它:

protected function _initModules()
{       
    $modules = scandir(APPLICATION_PATH . '/modules');
    foreach ($modules as $m) {
        if ($m != '.' && $m != '..') {
            // Adding path for library
            set_include_path(implode(PATH_SEPARATOR, array(realpath(APPLICATION_PATH . '/modules/'.$m.'/library'), get_include_path())));   
        }

        spl_autoload_register(function($classname){
            include str_replace('_', DIRECTORY_SEPARATOR, $classname) . '.php';
        });
    }
}

这个函数应该放在 Bootstrap.php 中,如果模块库存储在 /application/modules/*module_name*/library 中就可以工作

于 2013-07-08T12:06:22.910 回答