zend框架1多个库目录

时间:2013-06-30 00:26:03

标签: zend-framework

我在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实现,还是我错过了什么? 感谢。

1 个答案:

答案 0 :(得分: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

中,则可以正常工作