Composer使用命名空间加载单个类

时间:2017-08-03 06:44:57

标签: php symfony composer-php symfony-flex

我试图使用symfony flex捆绑。

我有这个目录结构

/
  src/
    AppBundle/
       AppBundle.php
       # Many classes
    Kernel.php

我想使用此命名空间App加载Kernel.php类,使用命名空间AppBundle加载AppBundle中的类。

我尝试了很多作曲家配置,但我无法加载它们。

"psr-4": {
    "AppBundle\\": "src/AppBundle/",
     "App\\": "src/"
}

但是我遇到了这样的错误:

Expected to find class "App\AppBundle\AppBundle" in file "/var/www/vhosts/flex/src/AppBundle/AppBundle.php"

更新

src / Kernel.php类有一个不同的命名空间,我无法改变它,因为其他类使用它,命名空间是App。有些脚本使用use App\Kernel

调用该类

src/AppBundle/AppBundle.php类具有此命名空间AppBundle

有办法做到这一点吗?

更新2

我把它整理出来了:

"autoload": {
    "psr-4": {
        "AppBundle\\": "src/AppBundle/"
    },
    "classmap": [
        { "App\\Kernel": "src/Kernel.php" }
    ]
},

2 个答案:

答案 0 :(得分:1)

我建议改为使用Kernel.php的类映射:

"autoload": {
    "psr-4": { "AppBundle\\": "src/AppBundle" },
    "classmap": [ "src/Kernel.php" ]
}

请参阅https://getcomposer.org/doc/04-schema.md#classmap

答案 1 :(得分:0)

你只需要

"psr-4": { "App\\": "src/" }