в свое время подключил к codeigniter composer и подтянул нужные либы, организовал автозагрузку классов в приложении, CI гулял по приложению в виде DI контейнера, но со временем решил вообще от CI избавиться, теперь это прошлое.
как правило class UserService{ function __construct(UserRepository $userRepo){$this->userRepo = $userRepository;}}
UserRepository impliments CrudRepositiory{ function findById($id){$users = UserQuery::create()->findPk($id)}}
вообще php код держать в публичной директории не комильфо, вот смотрите https://github.com/dimaxz/frameworkless/blob/maste... команда php app/command packages:install переносит публичные файлы пакета в публичную директорию
не знаю у меня не было проблем с установкой модуля через компосер и переброской публичных скриптов в публичную директорию сайта, и не нужно избавляться от перенесенных файлов в vendor, вообще там удалять не чего не нужно.
по поводу произвольной директории вот что гуглится https://getcomposer.org/doc/faqs/how-do-i-install-...
я думаю схемы есть разные у каждой есть плюсы и минусы, посмотрите как сделано в других CMS
очень странно, в компосер можно вписать любую структуру, и еще лучше с стилем PSR так будет лучше поддерживать, если вы переживаете на счет публичных файлов css,js и тд. это тоже решаемо. компосер в данном случаем дает дает схему обновления с учетом версионности, автозагрузку классов, и возможность выполнения bash скриптов
на счет датамаппера я согласен, я тоже приветствую такой подход и даже писал свой велосипед https://github.com/dimaxz/SimpleORM, но просто так замапить объект по простому не получиться так как нужно думать о таких вещах как транзакционность, связи с другими объектами (Relationships), их сохранение или выборка, кеширование, валидация и многое другое.