Структура папок в Laravel

Как организовать структуру папок в Laravel

На данный момент Laravel является одним из популярных фреймворков на PHP. Он достаточно ускоряет процесс разработки и предоставляет возможность писать чистый код.

Проекты с нуля я пишу на Laravel, поэтому изучил этот фреймворк достаточно глубоко. Laravel помогает разработчикам грамотно структурировать бизнес-логику. Но, несмотря на это, нужно придерживаться одной конкретной парадигме, чтобы в коде не царила путаница.

Об архитектуре приложения нужно задуматься в самом начале разработки, чтобы в дальнейшем облегчить процесс.

Что я имею в виду под организацией структуры бизнес-логики?

От сложности проекта зависит, какой именно подход нужно выбрать для структурирования кода. Например, если проект маленький, и контроллеров не очень много, приемлемо их размещать в общей папке Controllers. Но любой проект рано или поздно начинает увеличиваться в размерах, поэтому лучше с самого начала применить модульный подход.

Один из вариантов организации структуры — сгруппировать контролеры, сервисы, сидеры по отдельным папкам.

Например, у нас есть сущности Пользователь, Профиль пользователя и Уведомление пользователя. Что у них общего? Они все предусмотрены для пользователя. Соответственно, мы можем сгруппировать эти сущности в отдельную папку User. Например, создать директорию Controllers/User или Services/User и разместить там классы, которые касаются этого модуля. Но не стоит так поступать с папкой Models, потому что от изменений в моделях могут быть зависимы разные модули.

Для больших проектов есть более удобный способ структурирования кода. Можно использовать пакет laravel-modules. Этот пакет позволяет разделить код проекта на разные модули, этим же изолировать контролеры, сервисы, сидеры и так далее. У каждого модуля есть своя папка для рутов, контроллеров, сервисов. Можно сказать, что каждый модуль это отдельный проект внутри одного проекта. В начале могут возникнуть сложности из-за того, что в проекте много уровней вложенности, но в дальнейшем такая структура папок поможет легко развивать проект.