Композер это пакетный менеджер, ты просто описываешь какие у тебя в проекте будут зависимости. Он так же рулит автозагрузкой классов.
То есть по сути, на минималках. Любой проект будет иметь примерно следующую структуру composer json
{
"name": "pomelchenko/project",
"type": "project",
"description": "description",
"minimum-stability": "stable",
"license": "proprietary",
"require": {
"php": "^7.4",
// тут зависимости для продакшена, когда будешь устанавливать приложение с флагом --no-dev
},
"require-dev": {
"phpunit/phpunit": "^9.5"
// тут зависимости для dev среды, с тестами и прочими инструментами которые несут вспомогательный смысл.
},
"autoload": {
"psr-4": {
"App\\": "src/"
// тут перечисляешь нэймспэйсы и пути до директорий с классами этих нэймспэйсов для приложения, которое будет на проде крутиться
}
},
"autoload-dev": {
"psr-4": {
"Tests\\": "tests/"
// тут перечисляешь нэймспэйсы и пути до директорий с классами этих нэймспэйсов для вспомогательных инструментов, как правило для тестов
}
}
}
После установки у тебя появится ./vendor/autoload.php который ты во фронтконтроллер подключишь чтобы всё заработало.
По сути всё. Остальное придет по необходимости во время работы.
Нужны тесты? Ставишь в phpunit так, чтобы он оказался в require-dev, то есть composer require --dev ...
Нужны пакеты для работы приложения? Например, роутер или орм, просто ставишь composer require ...
Ничем более как менеджмент зависимостей композер не занимается. В смысле на бизнеслогику и инфраструктуру (ну кроме как автолоад классов и файлов) проекта он никак не влияет.