Yii2 страница с большим количеством форм и ajax

316
15 августа 2017, 16:13

Изучаю yii2 и планирую переводить старый "проект" на рельсы ооп и фреймворка. Проект - пользовательская "база данных". Это регистрация клиентов, их обращений и заказов, внесение результатов и т.п. Крутится на локальном сервере и пользователей 10-15 человек.

Если взять, например, страницу регистрации, то она преставляет из себя несколько форм и множество разных пунктов меню\кнопок. И всё это работает без перезагрузки страницы. Всего 5 форм и около 20-25 ajax возможных действий. И тут возникает вопрос.

Допустим, что всё это выводится контроллером SiteController. Под все таблицы базы данных созданы соответствующие модели, установлены связи между ними. Вьюха тоже есть. Так вот. Получается, что все эти ajax и формы нужно принимать и обрабатывать одним контроллером SiteController в действии actionIndex? Или это как-то разносится на какие-то части и т.п.?

В хорошо организованных приложениях контроллеры обычно очень тонкие и содержат лишь несколько строк кода. Если ваш контроллер слишком сложный, то обычно это означает, что вам надо провести его рефакторинг и перенести часть кода в другие места [исчточник].

Вопрос, собственно, в этом и заключается - при большом количестве форм и ajax на странице, где и как всё это обрабатывать? И вообще как быть, что посоветуете? Направьте, пожалуйста.

Upd Тут, наверное, вопрос больше касается структуры приложения. У меня база данных реляционная больше 40 таблиц. Понятно, что под каждую таблицы нужно будет создать модели, описать связи и т.п. Но.... В самом приложении у меня по сути 3 страницы основные - регистрация, внесение результатов и поиск. Если брать страницу "Регистрация", то там, как я уже писал, несколько форм и много разныx ajax. Например, форма регистрации нового клиента и полный CRUD аяксом для этой формы. Потом на той же странице форма для регистрации обращений этого клиента и т.д. По сути страница одна - registration. Получается, что и контроллер один - RegistratonController. А внутри множество экшенов: actionAddClient, actionUpdateClient, actionDeleteClient, actionLoadClient, actionAddHandling и т.п. Аяксом я обращаюсь к нужному экшену, где произвожу действия, использую модель и др. На странице поиска (это уже контроллер SearchController) выполняются строго заданные запросы - например, сколько клиентов без того-то и того-то и информация о них. И там тоже свои action. Но по сути-то это дублирование кода - если я на странице регистрации получаю информацию о клиентах и вывожу их в одном виде, а на странице поиска я также получаю информацию о клиентах, но уже немного в другом виде и с некоторым дополнительным условием... Словом, как тут быть? И верно ли я всё понимаю?

Answer 1

Возможно я не совсем корректно понял, но. Если у вас есть по сути повторяющиеся методы в контроллерах (экшены) и все работает с таблицами пользователей, при этом поиск работает с фильтрами на существующие таблицы пользователей, то отдельные контроллеры создавать не нужно. Вам попросту необходимо добавлять фильтр через ORM для реализации поиска. И любые CRUD операции работающие как с общими данными так и с фильтрованными поиском данными будут применяться на соответствующие данные пришедшие из дата-провайдера. А уже содержимое дата-провайдера зависит от контекста (поиск или любой другой результат). Резюмируя: Если источник данных один, то нет необходимости изобретать кучу контроллеров. Есть необходимость исключительно в гибкой реализации обработки некоторых методов, но отнюдь не новых контроллеров. Основываться на принципе: источник данных один - контроллер один. Под источником данных я имею ввиду некий объект системы, что представляет собой одну или несколько связанных моделей необходимых для реализации процесса.

Answer 2

Делайте несколько action в контроллере site. Затем, используя Yii-2 Pjax, строите сайт как обычно, но из-за использования Pjax создастся иллюзия, как будто страница сайта не перезагружается, но при этом будет несколько независимых action в контроллере. Думаю это как раз то что Вам нужно.

READ ALSO
DSN: Data format error

DSN: Data format error

пытаюсь отправить сообщения с сервера Ubuntu nginx через sendmail выдает вот такую ошибку

266
Как сделать свою форму для добавления записи в post type

Как сделать свою форму для добавления записи в post type

Я новичок в wordpress да и в php тожея создал свой post type, и теперь хочу сделать свою форму для добавления записи

231
Пустой массив $_GET

Пустой массив $_GET

Передаю get параметры, но при получении сталкиваюсь с проблемой - $_GET пустой, var_dump показывает NULL, ума не приложу как так получаетсяПри том, что...

238
adldap2 получить членов группы

adldap2 получить членов группы

Добрый день! Пытаюсь получить членов группы

219