Я вижу проблему с вашей декларацией PSR-4.
Вы не должны помещать «основные» классы в папку, в которой есть подпапки для других пространств имен.
Автозагрузка PSR-4 в Composer работает следующим образом: если полное имя класса для загрузки совпадает с префиксом, объявленным в любом из определений PSR-4, то префикс, упомянутый в префиксе, удаляется из имени класса, а оставшееся имя класса сопоставляется с именем файла и выполняется поиск.
Если у вас есть классы с именем Application\
в папке application/modules
, и у вас есть классы с именем Core\
в папке application
, то технически Composer может найти файлы, соответствующие имени класса, например Core\modules\Whatever
, хотя вместо этого эти файлы будут содержать класс Application\Whatever
.
Я рекомендую переместить все классы Core
в свою папку и указать на это в объявлении PSR-4.
Проблема с вашим первоначальным вопросом заключается в том, что вы опускаете важную информацию: какова структура класса и файла для ваших модулей?
Автозагрузчик Composer с радостью разрешит любой класс, который начинается с префикса пространства имен Application
, удалит этот префикс из имени класса, преобразует остатки в имя пути и найдет этот файл в application/modules/
. Учитывая, что у вас модуль класса Application\MyModule\Foobar
, он будет искаться в application/modules/MyModule/Foobar.php
. Почему? Потому что префикс Application
будет удален, чтобы можно было использовать более короткие имена путей в PSR-4. (Использование PSR-0 означает, что у вас должна быть папка для каждого уровня пространства имен в имени класса.)
Обратите внимание, что для оптимальной производительности рекомендуется делать префикс для пространств имен как можно более длинным, потому что Composer позволяет иметь более одного каталога для любого заданного префикса, но тогда ему приходится искать правильный файл более чем в одном каталоге. Поиск файлов занимает много времени!
person
Sven
schedule
22.06.2014
Application\foo\Bar
посмотрит наapplication/modules/foo/Bar.php
. Меня это так часто сбивает с толку, что я решил, наконец, запомнить это с помощью запишите! - person bishop   schedule 09.01.2015