0

我有一个带有一些模块的应用程序。其中之一是CourseSearch。现在我想再添加一个,SportsPartnerSearch. 由于这两个模块彼此非常相似,我只是“克隆”/复制了CourseSearch所有“Course”并将所有“Course”替换为“SportsPartner”(所有变体:$courseto $sportsPartnercourse-...phtmltosports-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') 在第 140 行的 /path/to/project/vendor/zendframework/zendframework/library/Zend/Loader/ClassMapAutoloader.php

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


一些额外的信息。

由于错误路径位于 CourseSearch 模块中,因此无法找到该类CourseSearch\View\Helper\CourseSearchFormSportsPartnerSearch当我停用包含该类的新模块时,可以找到它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以相同的方式在 the 中实例化并且SportsPartnerSearch\Module#getViewHelperConfig()尚未调用。

4

1 回答 1

1

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

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

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

这将在 SportsPartnerSearch 模块内生成一个新的类映射文件。

于 2013-10-04T07:21:07.620 回答