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

Zend framework2 使用StandardAutoloader自动加载Zend Framework 2软件包,zend-framework2,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.ph

我以前使用的是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'
    )
));
$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'
    )
));
这是因为所有Zend包都在库文件夹中。我现在想使用composer只加载我需要的Zend包。我遇到的问题是,包的排列方式如下:

zendframework/zend-cache/Zend/...
zendframework/zend-loader/Zend/...
zendframework/zend-validator/Zend/...
etc.
我尝试在StandardAutoloader中使用单独的命名空间声明,如下所示:

// 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'
    )
));
$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'
    )
));

那不行。我假设名称空间中可能没有反斜杠?有什么办法可以让这一切顺利进行吗?最好不必定义每个包。

让它为您自动加载Zend:

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

您只需修复路径:

$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

在手动包含包时是否不起作用,你确定吗?它只是注册了Zend命名空间..它的结构完全相同,不应该有什么区别吗?不,这个特定的标志假定库位于一个位置:看啊,我的坏消息,我从未意识到。)它们在不同的文件夹中,我从来没有仔细看过,我以为它们都会在Zend文件夹中,这会很好,但我不明白为什么它们都不能被固定在Zend文件夹中…:)