Архитектура и структура папок Laravel: Полный гид
Когда вы впервые устанавливаете фреймворк и открываете готовый проект в редакторе кода, огромное количество директорий и файлов может сбить с толку. Однако пугаться не стоит: архитектура Laravel продумана до мелочей и интуитивно понятна. Каждая директория имеет свое строгое предназначение, что делает работу над проектом предсказуемой даже для больших команд разработчиков.
В этой статье мы подробно разберем, как устроена структура проекта Laravel, за что отвечают основные директории и как правильно организовать код, чтобы он легко читался и масштабировался.
Паттерн MVC: основа Laravel
В основе фреймворка лежит классический архитектурный паттерн разработки — MVC (Model-View-Controller). Он логически разделяет приложение на три взаимосвязанных компонента, чтобы отделить бизнес-логику от визуального интерфейса.
Model (Модель)
Отвечает за взаимодействие с базой данных. В Laravel эту роль берет на себя мощный инструмент — Eloquent ORM. Модели описывают структуру данных и связи между таблицами (например, «У одного пользователя может быть много статей»).
View (Представление)
Отвечает за то, что видит конечный пользователь на экране. Это HTML-шаблоны. В Laravel используется встроенный шаблонизатор Blade, в который динамически подставляются данные из базы.
Controller (Контроллер)
Связующее звено или «мозг» операции. Контроллер принимает HTTP-запрос от пользователя, запрашивает нужные данные у модели и передает их в представление для отрисовки.
Понимание этого паттерна — база, без которой невозможно правильно писать и структурировать код.
Основные папки Laravel: где и что лежит
Давайте пройдемся по корневому каталогу приложения. Начиная с Laravel 11 структура проекта стала более минималистичной, но базовые принципы остались неизменными.
app/
Сердце вашего приложения. Здесь хранится весь основной PHP-код бизнес-логики.
Основные директории:
Http/Controllers— контроллерыModels— моделиConsole— консольные командыProviders— сервис-провайдеры
bootstrap/
Содержит файл app.php, который инициализирует фреймворк. В новых версиях Laravel здесь также настраиваются маршруты, middleware и обработка исключений.
Дополнительно содержит директорию cache/ для ускорения загрузки приложения.
config/
Директория с конфигурационными файлами:
- база данных
- почта
- кэш
- очереди
- сессии
В Laravel 11+ папка может быть скрыта для упрощения структуры проекта.
database/
Все, что связано с базами данных:
- миграции
- фабрики
- сидеры
public/
Публичная директория проекта.
Именно на нее должен смотреть веб-сервер (Nginx или Apache).
Здесь находятся:
index.php- CSS
- JavaScript
- изображения
- шрифты
resources/
Исходники фронтенда и шаблонов.
Основные папки:
viewscssjs- языковые файлы локализации
routes/
Файлы маршрутизации приложения.
Основные:
web.phpapi.phpconsole.phpchannels.php
storage/
Служебная директория Laravel.
Здесь хранятся:
- логи
- кэш
- скомпилированные Blade-шаблоны
- пользовательские файлы
Особенно важен файл:
storage/logs/laravel.log
Где писать бизнес-логику
Одна из самых распространенных ошибок новичков — писать всю логику прямо в контроллерах.
Правильная архитектура подразумевает четкое разделение ответственности.
Контроллеры
Контроллер должен:
- принять запрос
- валидировать данные
- вызвать сервис
- вернуть ответ
Контроллеры должны оставаться «тонкими».
Модели
Модели должны содержать только то, что относится к данным:
- связи
- scopes
- accessors
- mutators
Сервисы и Actions
Сложную бизнес-логику лучше выносить в отдельные классы.
Например:
app/Services/UserRegistrationService.php
Такой подход делает проект:
- чище
- удобнее для тестирования
- проще для поддержки
- легче для масштабирования
Жизненный цикл запроса (Request Lifecycle)
Чтобы понять, как Laravel работает внутри, разберем путь HTTP-запроса.
1. Точка входа
Пользователь открывает сайт.
Запрос попадает в:
public/index.php
2. Инициализация приложения
Laravel загружает Composer autoload и запускает ядро приложения.
3. Маршрутизация
Роутер ищет совпадение URL в директории routes/.
4. Middleware
Перед обработкой запрос проходит через middleware:
- авторизация
- CSRF-защита
- ограничения доступа
- throttling
5. Контроллер
Контроллер получает запрос и обращается к моделям или сервисам.
6. Ответ пользователю
Laravel возвращает:
- HTML
- JSON
- редирект
- файл
Заключение
Laravel предлагает понятную и логичную структуру проекта, которая отлично подходит как для небольших сайтов, так и для крупных корпоративных систем.
Понимание структуры папок, принципов MVC и правильного разделения бизнес-логики помогает создавать масштабируемые и поддерживаемые приложения.
В следующей статье мы рассмотрим развитие Laravel и разберем ключевые изменения последних версий фреймворка.