捆绑服务 - 尝试从命名空间加载 class
Bundle service - Attempted to load class from namespace
在我的 symfony 项目中,我有两个包。
我的第一个包 (Bundle1) 是主包,第二个包 (Bundle2) 用于存储一些服务。
这是我的 service.yml(Bundle2):
services:
sc_ezpublish_helpers.generic_find:
class: SC\EzPublishHelpersBundle\Helper\GenericFindHelper
在 Bundle1 中,我这样调用我的服务:
$findHelper = $this->get( 'sc_ezpublish_helpers.generic_find' );
清除缓存后出现此错误:
Attempted to load class "GenericFindHelper" from namespace "SC\EzPublishHelpersBundle\Helper".
Did you forget a "use" statement for another namespace?
堆栈跟踪
在 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
。自动加载器使用文件夹名称来匹配 class 名称,因此您必须在自动加载中指定此不匹配:
"autoload": {
"psr-4": {
"SC\EzPublishHelpersBundle\Helper\": "src/SC/EzPublishHelpersBundle/Helpers/",
"": "src/"
}
}
或(可能是更简单和更常用的方法)将文件夹重命名为 Helper。
顺便说一句,class 名称也是如此。如果您的 GenericHelper
class 在文件 GenericFindHelper.php
中,则自动加载器将无法将文件名与 class 名称相匹配。因此,如果保留名称和命名空间对您来说绝对重要,请重命名该文件或为该特定文件使用 classmap-autoloader。
编辑:我刚刚注意到错误的 class 名称只是我回复中的错字。在您的示例中它匹配。
在我的 symfony 项目中,我有两个包。 我的第一个包 (Bundle1) 是主包,第二个包 (Bundle2) 用于存储一些服务。
这是我的 service.yml(Bundle2):
services:
sc_ezpublish_helpers.generic_find:
class: SC\EzPublishHelpersBundle\Helper\GenericFindHelper
在 Bundle1 中,我这样调用我的服务:
$findHelper = $this->get( 'sc_ezpublish_helpers.generic_find' );
清除缓存后出现此错误:
Attempted to load class "GenericFindHelper" from namespace "SC\EzPublishHelpersBundle\Helper". Did you forget a "use" statement for another namespace?
堆栈跟踪
在 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
。自动加载器使用文件夹名称来匹配 class 名称,因此您必须在自动加载中指定此不匹配:
"autoload": {
"psr-4": {
"SC\EzPublishHelpersBundle\Helper\": "src/SC/EzPublishHelpersBundle/Helpers/",
"": "src/"
}
}
或(可能是更简单和更常用的方法)将文件夹重命名为 Helper。
顺便说一句,class 名称也是如此。如果您的 GenericHelper
class 在文件 GenericFindHelper.php
中,则自动加载器将无法将文件名与 class 名称相匹配。因此,如果保留名称和命名空间对您来说绝对重要,请重命名该文件或为该特定文件使用 classmap-autoloader。
编辑:我刚刚注意到错误的 class 名称只是我回复中的错字。在您的示例中它匹配。