Изучаю 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. Но по сути-то это дублирование кода - если я на странице регистрации получаю информацию о клиентах и вывожу их в одном виде, а на странице поиска я также получаю информацию о клиентах, но уже немного в другом виде и с некоторым дополнительным условием... Словом, как тут быть? И верно ли я всё понимаю?
Возможно я не совсем корректно понял, но. Если у вас есть по сути повторяющиеся методы в контроллерах (экшены) и все работает с таблицами пользователей, при этом поиск работает с фильтрами на существующие таблицы пользователей, то отдельные контроллеры создавать не нужно. Вам попросту необходимо добавлять фильтр через ORM для реализации поиска. И любые CRUD операции работающие как с общими данными так и с фильтрованными поиском данными будут применяться на соответствующие данные пришедшие из дата-провайдера. А уже содержимое дата-провайдера зависит от контекста (поиск или любой другой результат). Резюмируя: Если источник данных один, то нет необходимости изобретать кучу контроллеров. Есть необходимость исключительно в гибкой реализации обработки некоторых методов, но отнюдь не новых контроллеров. Основываться на принципе: источник данных один - контроллер один. Под источником данных я имею ввиду некий объект системы, что представляет собой одну или несколько связанных моделей необходимых для реализации процесса.
Делайте несколько action в контроллере site. Затем, используя Yii-2 Pjax, строите сайт как обычно, но из-за использования Pjax создастся иллюзия, как будто страница сайта не перезагружается, но при этом будет несколько независимых action в контроллере. Думаю это как раз то что Вам нужно.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей