@sanex3339

Как лучше изменить архитектуру модуля?

Итак:
Есть модуль который рисует на странице категории 'чекбоксов' (на самом деле это ссылки) для фильтрации результата, при клике на них выводит отфильтрованные данные модели в указанную вьюху, где пользователь может их вывести удобным ему способом.

Задача уже реализована для yii2 фреймворка.
При установке модуля пользователю нужно указать в своём контроллере и во вьюхе, где нужно выводить данные -3 метода модуля с различными настройками:
в контроллере - начальные настройки модуля - модель, настройки кеширования, алиас до ajax вьюхи (в неё доставляются отфильтрованные данные), которая будет renderPartial()'ится в основную вьюху контроллера
в основной вьюхе - указываем какие чекбоксы мы рисуем, т.е. по каким свойствам модели и по каким значениям мы будем фильтровать данные
в основной вьюхе - методом указываем место, где будем рендерить ajax-вьюху с данными

Визуально это выглядит все вот так: www.youtube.com/watch?v=Vah2j5WzXIs

Теперь про архитектуру:
При загрузке или обновлении страницы точка вызова модуля - соответственно метод модуля (где мы указываем модель и настройки модуля), вызванный в контроллере, далее из метода модуля мы стучимся в контроллер модуля, откуда идем в класс модуля, в котором собираем query и получаем данные из модели, которые передаем обратно в контроллер модуля, где затем выводим их в ajax-вьюху.
Самое главное, что все настройки модуля указываются при вызове модуля в контроллере пользователя.

Теперь проблема:
При клике на чекбокс мы ajax-ом стучимся напрямую в контроллер самого модуля и тут то встает проблема - получить указанные ранее настройки модуля, а среди настроек находятся и объекты (модель, к примеру).

На данный момент я при первом вызове модуля помимо всего прочего пихаю все необходимые настройки в массив, который шифрую (методом yii2 encryptByKey() с ключом cookieValidationKey, который уникальный для каждого yii2 приложения), а после массив кладу в сессию. Соответственно, при ajax-запросе к контроллеру модуля я беру все настройки из сессии, расшифровываю тем же ключом и дальше уже работаю как обычно, получаю отфильтрованные данные и вывожу их в ajax-вьюху.

Собственно хотелось бы узнать - как нужно изменить архитектуру модуля, что бы получать настройки модуля при ajax-запросе к модулю БЕЗ использования сессий, кук, БД и локал стораджей?
Условие - настройки модуля должны задаваться в контроллере, в котором этот модуль вызывается.

Пробовал вариант - долбиться ajax'ом в контроллер, из которого модуль вызывается, т.е. мы долбились туда и повторно получали его настройки, но выходили жуткие косяки с рендерами вьюх (в основной вьюхе рендерилась ещё раз основная вьюха)

Вот кривая картинка со структурой модуля, рисовал месяц назад и на скорую руку (минутка смеха =) )):
8176af2b07.jpg
  • Вопрос задан
  • 352 просмотра
Решения вопроса 1
vyachin
@vyachin
Ищу работу
Смотрим определение модуля www.yiiframework.com/doc-2.0/guide-structure-modul... все такие это "независимая" единица приложения со своими контроллерами, моделями, компонентами. Смотрим определение вашего модуля "Есть модуль который рисует на странице категории 'чекбоксов'". Уже в первом предложении вы даете определение виджету www.yiiframework.com/doc-2.0/guide-structure-widge... Он как раз и занимает "рисованием".
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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