使用StandardAutoloader自动加载Zend Framework 2软件包

时间:2013-03-01 16:20:23

标签: zend-framework2

我之前使用的是Zend Framework 2的下载版本,基本上可以做到这样的事情:

// Set include paths (add Zend to the path)
set_include_path(get_include_path() . PATH_SEPARATOR . $__CONFIG['zendPath']);

// Setup the Zend Autoloader
require_once('library\Zend\Loader\StandardAutoloader.php');

$autoLoader = new StandardAutoloader(array(
    'namespaces' => array(
        'Zend' => $__CONFIG['zendPath'] . '/library/Zend'
    )
));

这是有效的,因为所有Zend包都在库文件夹中。我现在想使用composer只加载我需要的Zend包。我遇到的问题是包以下列方式排列:

zendframework/zend-cache/Zend/...
zendframework/zend-loader/Zend/...
zendframework/zend-validator/Zend/...
etc.

我尝试在StandardAutoloader中使用单独的名称空间声明,如下所示:

$autoLoader = new StandardAutoloader(array(
    'namespaces' => array(
        'Zend\Cache' => $__CONFIG['zendPath'] . '/library/zend-cache/Zend/Cache',
        'Zend\Loader' => $__CONFIG['zendPath'] . '/library/zend-loader/Zend/Loader',
        'Zend\Validator' => $__CONFIG['zendPath'] . '/library/zend-validator/Zend/Validator'
    )
));

这不起作用。我假设命名空间可能不会有反斜杠吗?有没有办法让这项工作?优选地,无需定义每个单独的包装。

2 个答案:

答案 0 :(得分:1)

您只需要修复路径:

$libs = $__CONFIG['zendPath'];
$autoLoader = new StandardAutoloader(array(
    'namespaces' => array(
        'Zend\Cache' => $libs . '/library/zend-cache/Zend',
        'Zend\Loader' => $libs . '/library/zend-loader/Zend',
        'Zend\Validator' => $libs . '/library/zend-validator/Zend',
    )
));

应该这样做(它没有经过测试,因此我不确定尾随Zend

答案 1 :(得分:0)

让它为你自动加载Zend:

$autoLoader = new StandardAutoloader(array(
    'autoregister_zf' => true, // Auto load Zend Namespace..
    'namespaces' => array(
         // extra namespaces
    )
));