PSR-4: автозагрузчик (композитор) и несколько пространств имен с одним и тем же корнем

В настоящее время все мои классы находятся в одной папке и находятся в одном пространстве имен:

"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/"},

3

Решение

Согласно PSR-4 Spec:

Все имена классов ДОЛЖНЫ указываться с учетом регистра.

Ваша конфигурация точна, поскольку разные пространства имен PSR-4 вложены в один и тот же каталог. Это должно работать, но может сбить с толку в будущем.

"psr-4": {
"RootNamespace\\": "lib/",
"RootNamespace\\Services\\": "lib/services/",
"RootNamespace\\Listeners\\": "lib/listeners/"},

Я рекомендую вам либо просто использовать заглавные буквы в соответствии со спецификацией PSR, либо переместить RootNamespace из верхнего уровня lib/ каталог.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector