为什么ZF2自动加载器错误地构建路径?

时间:2013-10-04 00:42:11

标签: zend-framework2 autoload autoloader

我有一些模块的应用程序。其中一个是CourseSearch。现在我想再添加一个SportsPartnerSearch。由于这两个模块彼此非常相似,我只是“克隆”/复制CourseSearch并将所有“课程”替换为“SportsPartner”(所有变体:$course$sportsPartnercourse-...phtmlsports-partner-...phtml等),以便在第二步中编辑逻辑。现在我遇到了以下错误:

  

警告:   require_once(/path/to/project/module/SportsPartnerSearch//src/CourseSearch/View/Helper/CourseSearchForm.php):   无法打开流:没有这样的文件或目录   /path/to/project/vendor/zendframework/zendframework/library/Zend/Loader/ClassMapAutoloader.php   在第140行

     

致命错误:require_once():无法打开所需的错误   '/path/to/project/module/SportsPartnerSearch//src/CourseSearch/View/Helper/CourseSearchForm.php'   (include_path ='。:/ usr / share / php:/ usr / share / pear')in   /path/to/project/vendor/zendframework/zendframework/library/Zend/Loader/ClassMapAutoloader.php   在第140行

为什么以奇怪的方式构建文件的路径:/path/to/project/module/ SportsPartnerSearch //src/ CourseSearch /View/Helper/CourseSearchForm.php?我在哪里犯了错误?


一些其他信息。

由于课程搜索模块中的wron路径为CourseSearch\View\Helper\CourseSearchForm,因此无法找到该类。当我停用包含类SportsPartnerSearch的新模块SportsPartnerSearch\View\Helper\SportsPartnerSearchForm时,可以找到它。

CourseSearchForm

中实现了CourseSearchForm\Module视图助手
class Module {
    public function getViewHelperConfig() {
        return array(
            'factories' => array(
                'courseSearchForm' => function($serviceManager) {
                    $helper = new View\Helper\CourseSearchForm(array('render' => true, 'redirect' => false));
                    // ERROR. This code is not executed anymore.
                    $helper->setViewTemplate('course-search/course-search/course-search-form');
                    $courseSearchForm = $serviceManager->getServiceLocator()->get('CourseSearch\Form\CourseSearchForm');
                    $helper->setCourseSearchForm($courseSearchForm);
                    return $helper;
                }
            )
        );
    }
}

在布局文件中调用:

echo $this->courseSearchForm();

SportsPartnerSearch\View\Helper\SportsPartnerSearchForm中的SportsPartnerSearch\Module#getViewHelperConfig()以同样的方式实现,并且尚未调用。

1 个答案:

答案 0 :(得分:1)

您是否生成了类图?检查CourseSearch和SportsPartnerSearch模块中的autoload_classmap.php文件。我猜你还有一个旧的类图。我认为问题隐藏在类图中,因为Zend的ClassMapAutoloader中存在错误,而不是标准的自动加载器。

您可以使用ZF2中提供的类映射生成器生成新的类映射(假设您通过Composer加载它):

cd module/SportsPartnerSearch
../../vendor/bin/classmap_generator.php

这将在SportsPartnerSearch模块中生成一个新的类图文件。