Связи в модулях. API в модулях.

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
myks1992@mail.ru
Сообщения: 137
Зарегистрирован: 2017.11.15, 23:54

Связи в модулях. API в модулях.

Сообщение myks1992@mail.ru » 2019.01.31, 02:21

Всем привет! Планирую делать различные модули? Которые должны как-то взаимодействовать друг с другом. Получать какие-то данные для логики.

Для этого у меня есть два варианта:
Сделать виджеты
Сделать API

Как вы используете? Подскажите...

Например, делаю модуль гео. Он будет отвечать за хранение информации о городах, странах и регионах. Он независим от других.

Далее делаю модуль мероприятий. Где город нужно получить из другого модуля. Желательно в базе ещё и хранить id, вместо строки.

Как соблюсти не связанность модулей и при этом чтоб все функционировало. Возможно придётся использовать и виджет и api, ведь нужно ещё и выводить на странице название города, а не id.

В общем подскажите как лучше сделать.

И второй вопрос как правильно реализовать api в модуле?

Было бы не плохо посмотреть на примеры)

Мой уровень средний. Изучаю Фреймворк чуть больше года. Прошу отвечать опираясь на этот факт))

Благодарю!

Аватара пользователя
Йож
Сообщения: 572
Зарегистрирован: 2015.08.26, 03:05

Re: Связи в модулях. API в модулях.

Сообщение Йож » 2019.02.02, 01:23

На примере модуля "dealer" (дилер)
1. Делаю таблицу dealer_to_geo
2. Добавляю релейшн в модель Dealer - getDealerGeo() via table dealer_to_geo
3. Добавляю public static function в модели Geo, чтобы выбирать все доступные Geo для выпадающего списка
4. Добавляю в форму создания/редактирования Dealer выпадающий список для выбора Geo

Аватара пользователя
proctoleha
Сообщения: 276
Зарегистрирован: 2016.07.10, 19:00

Re: Связи в модулях. API в модулях.

Сообщение proctoleha » 2019.02.02, 04:29

myks1992@mail.ru писал(а):
2019.01.31, 02:21
И второй вопрос как правильно реализовать api в модуле?
Благодарю!
Точно так же как не в модуле. Какая разница для контроллера, который обрабатывает api запросы, где он лежит, в модуле, или нет? Другое дело, что лучше явно прописать роуты в конфиге, например:

Код: Выделить всё

...       
    'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'rules' => [
                'POST add-production' => 'api/add/production',
                'POST check-create-order' => 'api/add/check-and-create',
                'POST check-only' => 'api/add/check-only',
                'POST get-literal' => 'api/literal/get',
                'POST add-in-literal' => 'api/literal/add',
                'POST return-api' => 'api/add/return-api',
            ],
        ],
...
    'modules' => [
...
        'api' => [
            'class' => 'app\modules\api\Api',
        ],
...
    ],
...
А по взаимосвязанности вопрос очень интересный. Редко, лично у меня, бывает ситуация, когда я могу запилить полностью независимый модуль, который буду потом таскать из проекта в проект. Это связано с тем, что обычно пишу узкоспециализированные приложения. Но случай с geo, как раз из таких.

Как бы я написал такой модуль.

1. У модуля свои таблицы, миграции, связи, внутренняя логика.
2. "Наружу торчит" только один класс, например, GetDataService

И в этом классе описаны все методы, например: GetAllCounty(), GetAllRegionForCountry($country_id), GetAllCityForRegion($region_id), GetAllDataForCity($city_id) ...

И, где-то "снаружи", лежит контроллер внешнего приложения, который use GetDataService, и который дергает этот модуль. Например, дай мне всю цепочку по id города: GetAllDataForCity($city_id), и во внешнем приложении, как вы правильно написали, в БД, у вас хранится только этот айдишник.
Вот за что я не люблю линукс, так это за свои кривые, временами, руки

myks1992@mail.ru
Сообщения: 137
Зарегистрирован: 2017.11.15, 23:54

Re: Связи в модулях. API в модулях.

Сообщение myks1992@mail.ru » 2019.02.04, 15:06

Благодарю))) Попробую так и сделать!)))))

Ответить