Задать вопрос
@pantsarny

Yii2 — как правильно организовать структуру?

Добрый день, коллеги! Возникла следующая ситуация - реализация проекта на Yii2. Планируется по началу 2 модуля - журнал (magazine) и каталог (catalog). За основу взят шаблон yii2-advanced. Вопрос в следующем - как правильно организовать структуру. Я думаю что необходимо реализовать модули magazine & catalog в каждом приложении (backend & frontend). Т.е. структура:
backend/modules/magazine/...
backend/modules/catalog/
frontend/modules/magazine/
frontend/modules/catalog/
Отсюда возникает еще один вопрос - где хранить модели модулей?
  • Вопрос задан
  • 1539 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 2
В common - модели, во фронтенд - контроллеры для фронтенда, в бекенде - наоборот.
Т.е. делаете модуль в common и от него наследуете все остальные в бекенд и фронтенд
Ответ написан
SamDark
@SamDark
Yii2 core team
Если у вас magazine и catalogue логически можно разделить на два приложения, делите. advanced позволяет размножать директорию frontend на сколько угодно приложений.

Если же логически приложение одно, делайте модулями.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@ImPuuLsE
Александр Макаров Gii еще бы генерил всё как надо, что бы такого не было : 02dc91a99e934d5b93f79bc99539894d.jpg
Вообще бы сказка была
Ответ написан
@maxyc_webber
Web-программист
не особо мне нравится тема модульности. Не такой уж у вас и большой проект.
ну во первых magazine предлагаю переименовать все же в blog, по контексту больше подходит. ну и не будет смущать в будущем у менее англо-понимающих разрабов )

я бы предложил использовать слой сервисную архитектуру.

Делается сервис, например, common\services\blog\Post.php
в этом классе все методы для работы с постами. на ум приходят пока только store/update/destroy/findOne/findAll
в админке, где вам потребуется работать с постами, вы будете работать лишь с 1 этим сервисом.
а именно, в конструктор контроллера, отвечающего за работу с постами, указываем
__constructor(...., PostService $postService, ...)
{
...
$this->postService = $postService

а в методе store контроллера, для создания поста достаточно лишь будет
$createdPost = $this->postService->store($arrayData)

и работаете дальше.

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

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

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

Похожие вопросы