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

标签 php symfony composer-php psr-4

Given 是一个 Symfony 4.4 应用程序(特别是 Sylius),使用 PSR-4 进行自动加载:

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

将所有 Controller 和实体等放在 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 中。避免嵌套命名空间“根”。

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

- ./src
- ./KYCBundle

或者在src中有不同的根:

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

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

关于php - 如何让 Composer/PSR-4 接受子文件夹中的第二个命名空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68289693/

相关文章:

php - WHERE 中使用多个 OR 术语的查询返回整个表

php - Symfony2 : How to replace a certain string with a global Twig variable?

ajax - Blueimp jQuery 文件上传和 symfony2 : issue with custom upload handler

php - 在 Composer 和 SVN 上出现错误 "No driver found to handle VCS repository"

php - 为什么我的 Docker Symfony 项目消耗这么多内存?

php - PDO 相关的数据库错误

php - 如何将数组内部指针设置到特定位置? PHP/XML

javascript - JQuery Ajax PHP 中的错误和成功处理

symfony - Doctrine - 对多个(多对多)关系使用同一个表

git - composer create-project 和 git clone 之间的主要区别是什么?