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/