我对 Zend Framework 2 非常陌生,并且正在使用 Michael Romer 的“Web Development with Zend Framework 2”一书作为我的指南。我在第 5 章的末尾,介绍了 ClassMapAutoloader 的主题。讨论的结论是我的Helloworld模块现在有->的文件和目录结构
Module.php
autoload_classmap.php
autoload_function.php
autoload_register.php
config/
module.config.php
public/
images/
css/
js/
src/
Helloworld/
Controller/
IndexController.php
views/
Helloworld/
Index/
index.phtml
据我所知,设置 Classmap 自动加载的感兴趣的文件是 Module.php、autoload_classmap.php、autoload_function.php、autoload_register.php。这些文件的内容是
模块.php ->
<?php
namespace Helloworld;
Class Module {
public function getAutoloaderConfig() {
return array(
'Zend\Loader\ClassMapAutoloader' => array(
__DIR__ . '/autoload_classmap.php'
),
'Zend\Loader\StandardAutoloader' => array(
'namespaces' => array(
__NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__
)
)
);
}
public function getConfig() {
return include __DIR__ . '/config/module.config.php';
}
}
autoload_function.php ->
<?php
return function ($class) {
static $classmap = null;
if ($classmap === null) {
$classmap = include __DIR_ . '/autoload_classmap.php';
}
if (!isset($classmap[$class])) {
return false;
}
return include_once $classmap[$class];
};
autoload_register.php ->
<?php
spl_autoload_register(include __DIR__ . '/autoload_function.php');
autoload_classmap.php ->
<?php
//require_once 'autoload_register.php';
return array();
当我在 autoload_classmap.php 中返回空白数组时,这一切都有效,但在书中示例有 require_once 'autoload_register.php';。当我取消注释该行时,我收到以下错误->
错误是-> [Tue Jun 18 16:29:20 2013] [error] [client 199.82.163.121] PHP Fatal error: Uncaught exception 'Zend\Loader\Exception\InvalidArgumentException' with message 'Map file provided does not return a地图。映射文件:“/var/www/ZendApp/module/Helloworld/autoload_classmap.php”在 /var/www/ZendApp/vendor/zendframework/zendframework/library/Zend/Loader/ClassMapAutoloader.php:88\n堆栈跟踪:\ n#0 /var/www/ZendApp/vendor/zendframework/zendframework/library/Zend/Loader/ClassMapAutoloader.php(117): Zend\Loader\ClassMapAutoloader->registerAutoloadMap('/var/www/ZendAp...') \n#1 /var/www/ZendApp/vendor/zendframework/zendframework/library/Zend/Loader/ClassMapAutoloader.php(60): Zend\Loader\ClassMapAutoloader->
我知道返回空白数组会导致 Module.php 的 Module 类中的 getAutoloaderConfig() 默认为 StandardAutoloader ,因此它可以工作,但为什么呢?我真的很想让 ClassMapAutoloader 在这个例子中做它的事情。我怎样才能让它工作?提前感谢您的回复。
詹姆斯伊士曼