加载本地Symfony包时出现ClassNotFoundException

时间:2017-10-27 09:10:56

标签: php symfony symfony-3.3

我尝试在我的应用程序中安装自定义Symfony软件包。 我使用以下文件夹结构创建了包:

.
├── composer.json
├── composer.lock
└── src
    └── Namespace
        └── CoreBundle
            ├── Controller ...
            ├── CoreBundle.php
            ├── Entity ...
            ├── Helper ...
            ├── Repository ...
            ├── Resources ...
            ├── Services ...
            └── Tests ...

我在composer install文件夹中成功安装了vendor的捆绑包。它在vendor/namespace/core-bundle下作为sym-link(我在本地加载)。

之后我在new Namespace\CoreBundle\CoreBundle(),中添加了AppKernel.php,这会产生以下错误:

(1/1) ClassNotFoundException

Attempted to load class "CoreBundle" from namespace "Namespace\CoreBundle".
Did you forget a "use" statement for another namespace?
in AppKernel.php (line 25)

我试图在vendor文件夹中手动复制文件夹,如果sym-link有任何问题,但它会产生相同的错误。我在dump(ClassMapGenerator::createMap('/path/to/symfony'));检查了自动加载的类,但我在那里找不到我的命名空间。我的配置错误或我的文件夹结构?如果您需要更多代码,我会尽快更新我的问题。

更新:我的捆绑composer.json

{
  "name": "namespace/core-bundle",
  "license": "proprietary",
  "type": "symfony-bundle",
  "autoload": {
    "psr-4": {
      "Namespace\\CoreBundle\\": "src/Namespace/CoreBundle"
    }
  },
  "require": {
    "doctrine/doctrine-bundle": "^1.6",
    "doctrine/orm": "^2.5",
    "liip/imagine-bundle": "1.9.*",
    "php": ">=5.5.9",
    "symfony/symfony": "3.3.*"
  },
  "require-dev": {
  },
  "extra": {
    "branch-alias": {
      "dev-master": "development"
    }
  }
}

2 个答案:

答案 0 :(得分:1)

我感觉您在composer install的自动加载中添加自动加载之前已经运行composer.json。这个问题是,安装忽略了.json文件,并直接进入锁定文件,并且锁存储所有以前的依赖项,使其处于先前测试的状态。

您要找的是composer update。它会丢弃.lock文件,并为将来的安装命令生成一个新的.lock文件。

答案 1 :(得分:1)

autoload的{​​{1}}部分的每次手动更新之后:

composer.json

不要忘记通过CLI刷新生成的{ "autoload": { "psr-4": { "Namespace\\CoreBundle\\": "src/Namespace/CoreBundle" } } }

/vendor/autoload.php