Symfony 捆绑服务-试图从命名空间加载类

Symfony 捆绑服务-试图从命名空间加载类,symfony,service,bundle,Symfony,Service,Bundle,在我的symfony项目中,我有两个包。 我的第一个包(Bundle1)是主包,第二个包(Bundle2)用于存储一些服务 这是我的service.yml(Bundle2): 在Bundle1中,我使用的呼叫服务如下: $findHelper = $this->get( 'sc_ezpublish_helpers.generic_find' ); 清除缓存后,出现以下错误: 试图从命名空间“SC\ezPublishHelperBundle\Helper”加载类“GenericFindHe

在我的symfony项目中,我有两个包。 我的第一个包(Bundle1)是主包,第二个包(Bundle2)用于存储一些服务

这是我的service.yml(Bundle2):

在Bundle1中,我使用的呼叫服务如下:

$findHelper = $this->get( 'sc_ezpublish_helpers.generic_find' );
清除缓存后,出现以下错误:

试图从命名空间“SC\ezPublishHelperBundle\Helper”加载类“GenericFindHelper”。 您是否忘记了另一个名称空间的“use”语句

堆栈跟踪

在app/cache/dev/appDevDebugProjectContainer.php的第20582行-

 */
protected function getScEzpublishHelpers_GenericFindService()
{
    return $this->services['sc_ezpublish_helpers.generic_find'] = new \SC\EzPublishHelpersBundle\Helper\GenericFindHelper($this->get('ezpublish.signalslot.repository'), $this->get('ezpublish.config.resolver.core'));
}
/**
这是我在composer.json中的自动加载

"autoload": {
    "psr-4": {
        "": "src/"
    },
    "classmap": [ "app/AppKernel.php", "app/AppCache.php" ]
},
这是我的Bundle2结构

src/
├── SC
│   └── EzPublishHelpersBundle
│       ├── DependencyInjection
│       │   ├── Configuration.php
│       │   └── SCEzPublishHelpersExtension.php
│       ├── Helpers
│       │   └── GenericFindHelper.php
│       ├── Resources
│       │   └── config
│       │       └── services.yml
│       └── SCEzPublishHelpersBundle.php
你有什么想法吗?我忘了什么吗


谢谢

您的目录名和名称空间不匹配。在文件夹结构中,它被称为
Helpers
(带复数s),在名称空间中使用
Helper
。自动加载程序使用文件夹名称与类名匹配,因此您必须在自动加载中指定此不匹配项:

"autoload": {
    "psr-4": {
        "SC\\EzPublishHelpersBundle\\Helper\\": "src/SC/EzPublishHelpersBundle/Helpers/",
        "": "src/"
    }
}
或者(可能是更简单、更常见的方法)将文件夹重命名为Helper

顺便说一下,类名也是如此。如果您的
GenericHelper
类位于文件
GenericFindHelper.php
中,则自动加载程序将无法将文件名与类名匹配。因此,如果保留名称和命名空间对您绝对重要,请重命名该文件或为此特定文件使用classmap autoloader


编辑:我刚刚注意到错误的类名只是我回复中的一个输入错误。在您的示例中,它匹配。

看起来像是自动加载问题。你能不能检查一下文件夹结构是否与名称空间匹配,或者在这里添加composer.json中的autoload部分我重命名了我的包,可能是因为这个原因?但是我到处都找遍了,如果我忘了什么我就找不到了。。。我用我的Autolodin更新了我的邮件,请显示你的文件夹结构。文件应该位于
src/SC/EzPublishHelpersBundle/Helper/GenericHelper.php
I添加了Bundle2结构。我删除了我的旧捆绑包(我重新命名的捆绑包),并用例外的名称重新创建了一个新捆绑包。但我也犯了同样的错误谢谢你的回答我没看到。今晚我会试着告诉你一切都好吗?很好,非常感谢。我一次又一次地检查,没有发现不匹配。。。谢谢:)
"autoload": {
    "psr-4": {
        "SC\\EzPublishHelpersBundle\\Helper\\": "src/SC/EzPublishHelpersBundle/Helpers/",
        "": "src/"
    }
}