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

时间:2017-12-29 19:45:45

标签: symfony service bundle

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

这是我的service.yml(Bundle2):

//Determine screen size
if ((getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_LARGE) {
    Toast.makeText(this, "Large screen", Toast.LENGTH_LONG).show();
}
else if ((getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_NORMAL) {
    Toast.makeText(this, "Normal sized screen", Toast.LENGTH_LONG).show();
}
else if ((getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_SMALL) {
    Toast.makeText(this, "Small sized screen", Toast.LENGTH_LONG).show();
}
else {
    Toast.makeText(this, "Screen size is neither large, normal or small", Toast.LENGTH_LONG).show();
}

在Bundle1中,我使用这样的方式调用我的服务:

services:
   sc_ezpublish_helpers.generic_find:
      class: SC\EzPublishHelpersBundle\Helper\GenericFindHelper

清除缓存后出现此错误:

  

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

堆栈跟踪

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

$findHelper = $this->get( 'sc_ezpublish_helpers.generic_find' );

这是我在composer.json中的自动加载

 */
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'));
}
/**

这是我的Bundle2结构

"autoload": {
    "psr-4": {
        "": "src/"
    },
    "classmap": [ "app/AppKernel.php", "app/AppCache.php" ]
},
你知道吗?我忘记了什么吗?

由于

1 个答案:

答案 0 :(得分:1)

目录名称和命名空间之间不匹配。在您的文件夹结构中,它被称为Helpers(带有复数形式),在您的命名空间中,您使用Helper。自动加载器使用文件夹名称来匹配类名,因此您必须在自动加载中指定此不匹配:

"autoload": {
    "psr-4": {
        "SC\\EzPublishHelpersBundle\\Helper\\": "src/SC/EzPublishHelpersBundle/Helpers/",
        "": "src/"
    }
}

或(可能更简单,更常见的方式)将文件夹重命名为Helper。

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

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