目前,我所有的类都在一个文件夹中,并且在一个 namespace 下:
"psr-4": {
"RootNamespace\\": "lib/"
},
这运作良好。随着我添加越来越多的类,我想将一些逻辑相关的类放入更深的 namespace 级别,但具有相同的根 namespace 。应该是这样的:
RootNamespace/Services (in 'lib/services' dir)
RootNamespace/Listeners (in 'lib/listeners' dir)
我想这样一来,我不需要更改composer.json ps-4自动加载定义中的任何内容,但是它不再起作用。
自动加载定义应如何实现我想要的目标?
经过我的测试,下面的解决方案不好,因为声明似乎已被覆盖
"psr-4": {
"RootNamespace\\": "lib/",
"RootNamespace\\Services\\": "lib/services/",
"RootNamespace\\Listeners\\": "lib/listeners/"
},
最佳答案
根据PSR-4 Spec:
您的配置准确,因为在同一目录中嵌套了不同的PSR-4 namespace 。它应该可以工作,但在以后可能会造成困惑。
"psr-4": {
"RootNamespace\\": "lib/",
"RootNamespace\\Services\\": "lib/services/",
"RootNamespace\\Listeners\\": "lib/listeners/"
},
我建议您要么将目录大写以符合PSR规范,要么将
RootNamespace
移出顶层lib/
目录。关于PHP-PSR-4 : Autoloader (composer) and multiple namespaces with the same root,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41752330/