Pull to refresh

Разработка CMS

Reading time 2 min
Views 699
Идея, родившаяся в процессе разработки собственной CMS. Часто нужно, чтобы одни и те же события были доступны одновременно через основной html вид, через ajax, или, к примеру, через мобильный телефон. Естественно, может понадобиться не только вывести данные в разных форматах(html, JSON, xml), но и выполнить дополнительные действия в зависимости от среды.

Можно реализовать это с помощью условий в отдельном методе контроллера, можно с помощью отдельных методов для каждого типа отображения, а можно так…

Идея заключается в разделении классов контроллеров по способу отображения.

Т.е. создаём основной контроллер, в котором реализуются дефолтные методы для обработки событий.

Дальше, для каждого типа отображения создаём контроллер, наследника основного контроллера, и реализуем открытые методы для событий, которые доступны в данном типе. Или делаем заглушки для методов, которые недоступны.

К названию классов этих контроллеров добавляем префикс (или постфикс) в соответствии с типом. Например: IndexController_Web, IndexController_Ajax, IndexController_Mobile и т.п.

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

Есть вариант реализовать в родительском контроллере только protected методы, реализующие действия, общие для всех типов или возвращающие данные в общем формате. Тогда в наследниках можно описывать только доступные методы, а ненужные методы будут недоступны по умолчанию.

Плюсы такого подхода:
  • Проверка типа осуществляется только один раз во фронт контроллере и нет необходимости каждый раз проверять условия работы скрипта
  • Код чётко разделён и не захламляется
  • Доступ по одному и тому же url'у в разных средах
  • Возможность легко закрыть ненужные методы

Минусов пока не нашёл)

Думаю, этот подход можно применить и в существующих CMS типа Zend Framework, проведя небольшие изменения в ядре или с помощью плагинов.
Tags:
Hubs:
+12
Comments 18
Comments Comments 18

Articles