如何使 Composer/PSR-4 在子文件夹中接受我的第二个命名空间?

How to make Composer/PSR-4 make accepting my second namespace in a subfolder?

给出的是一个使用 PSR-4 自动加载的 Symfony 4.4 应用程序(特别是 Sylius):

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

到目前为止,将所有控制器和实体等放在 src 目录下效果很好:

+ src
  - Controllers
  - Entities

对应的命名空间如:

namespace App\Controller\Admin;

但是对于第二个命名空间 KYCBundle 这不起作用。

+ src
   + KYCBundle
     - Controllers
     - Command
     - Entities

当我想将 类 与以下命名空间声明一起使用时:

namespace KYCBundle\Command\AccessTokenCommand

这会报错:

Expected to find class "App\KYCBundle\Command\AccessTokenCommand" in file " ./src/KYCBundle/Command/AccessTokenCommand.php" while importing services from resource "../src/*", but it was not found! Check the namespace prefix used with the resource.

当我将命名空间从 KYCBundle\Command 更改为 App\KYCBundle\Command 时,我认为效果很好。另外,当我删除 PSR-4 配置中的第二行时,事情不会改变,这基本上意味着无论是否使用 KYCBundle 的 PSR-4 配置都不会被使用。

如何让我使用命名空间 KYCBundle 作为没有前缀 App 的根级别?

不要将第二个命名空间中的 类 放在 src 中。避免嵌套名称空间“roots”。

要么将您的第二个命名空间放在 src 之外。例如:

- ./src
- ./KYCBundle

或在 src 中有不同的根:

- ./src/App
- ./src/KYCBundle

从逻辑上讲,修改您的 composer.json 文件以匹配您的目录结构。