Как структурировать Laravel приложение?

Занимаюсь изучением Laravel 6, для написания своего приложения.
В связи с этим у меня возникло несколько вопросов, касающиеся структурирования проекта:
1) В документации повсеместно приводятся примеры, где контроллер напрямую обращается к Eloquent модели, что бы получить данные и передать во View. У меня возникло подозрение, что в реальных проектах существует еще один слой между, контроллером и моделью. Например, если у нас блог, и что бы получить какую-то публикацию, можно обращаться с какому-то классу, типа Posts:get($id) и уже там определять способ получения публикации, например, обращаться к Eloquent модели. Можно ли так делать? Имеется ли у Laravel какие-то указания по поводу этого? Ведь стоит только изменить имя поля, таблицы в базе данных и придется переписывать кучу файлов, а если использовать какой-то один класс для этого, то только в одном месте.
2) Модели так и должны все быть в папке app, или для них нужно создать отдельную директорию?
3) Где лучше размещать свои классы и функции? В документации, в качестве примера иногда используется импорт вроде use App\Services\... Но папки Services нет в разделе документации Directory Structure
  • Вопрос задан
  • 744 просмотра
Пригласить эксперта
Ответы на вопрос 2
Alex_Wells
@Alex_Wells
PHP/Kotlin
Как хотите. Главная проблема - заблуждение о том, что laravel дает готовую структуру которой надо свято следовать - а все как раз наоборот. Он из коробки дает возможность строить структуру так, как вам хочется, без каких либо последствий.

Я всегда сразу же разбиваю приложение на модули (домены) и там отталкиваюсь от нужной мне структуры.

Слепо переносить код из контроллера в сервис не имеет смысла, имхо.
Ответ написан
Комментировать
zorca
@zorca
  1. Да. Зовется Repository - дополнительный слой абстракции, не зависящий от конкретного метода хранения данных.
  2. Лучше создать новую директорию, это немного удобнее, чем кидать все модели в корень.
  3. Для создания своего функционала, который достаточно объемен, по идеологии Laravel, требуется создавать Service Provider.


В целом пример хороших практик структуризации проекта можно подсмотреть в Laravel Boilerplate.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы