Опишу вкратце самый простой способ, с помощью которого я разделил проект пополам. В моём случае это были админка и личный кабинет пользователя.
Это не потребует подключения новых пакетов, перестройки директорий фреймворка и вот этого всего. Всё сводится к следущему:
- создаём два или более файлов с маршрутами в директории routes;
- в файле routes/web.php подключаем эти два файла через require(_once);
- в этих новых файлах описываем маршруты для соответствующих функциональных блоков (например, в файле для админки, описываем роуты админки);
- далее создаём контроллеры (в отдельных пространствах!) и вьюшки для админки и личного кабинета отдельно.
Всё. Может быть есть и другие варианты, но для простого случая вполне хватит вот такого разделения на основе контроллеров+видов+роутов. Хотя термин «модуль» в этом случае весьма условен, ведь это не самостоятельные подключаемые библиотеки, а всё ещё неотъемлемые части проекта.
Большой плюс этого подхода — простота реализации, и он вполне подходит для большинства типовых случаев.
Большой минус, который, впрочем, легко решаем — по началу придётся столкнуться с дублированием больших объёмов кода «модулей», который отвечает за одни и те же операции (например, изменение модели в админке и кабинете).
Дублирующиеся виды (например, табличный вывод одних и тех же моделей) следует выносить в отдельные подключаемые (переиспользуемые) файлы. Одинаковый функционал следует размазать по CRUD-политикам моделей, сервис-провайдерам и прочим сущностям фреймворка, чтобы суть контролеров была проста и ясна.