В настоящее время все мои классы находятся в одной папке и находятся в одном пространстве имен:
"psr-4": {
"RootNamespace\\": "lib/"},
Это работает хорошо. Поскольку я добавляю все больше и больше классов, я хотел бы поместить некоторые логически связанные классы в более глубокий уровень пространства имен, но с тем же корневым пространством имен. Это должно быть что-то вроде этого:
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 вложены в один и тот же каталог. Это должно работать, но может сбить с толку в будущем.
"psr-4": {
"RootNamespace\\": "lib/",
"RootNamespace\\Services\\": "lib/services/",
"RootNamespace\\Listeners\\": "lib/listeners/"},
Я рекомендую вам либо просто использовать заглавные буквы в соответствии со спецификацией PSR, либо переместить RootNamespace
из верхнего уровня lib/
каталог.
Других решений пока нет …