Русскоязычный форум, посвященный фреймворку Kohana http://forum.kohanaframework.su/ |
|
Умные контроллеры http://forum.kohanaframework.su/viewtopic.php?f=38&t=737 |
Страница 1 из 1 |
Автор: | WinterSilence [ 23 авг 2013, 01:17 ] |
Заголовок сообщения: | Умные контроллеры |
При создании контроллеров постоянно приходится сталкиваться с однотипными повторяющимися действиями по созданию и загрузке моделей. Обычно каждый контроллер использует одну основную модель, например, контроллер статей создает модель статей, контроллер товаров для магазина создает модель товаров и т.д. Я решил упростить себе жизнь и создал контроллер, выполняющий всю черновую работу за меня. Код:
Упрощенный пример использования: Код:
На самом деле большинство контроллеров имеет один и тот же функционал, например frontend контроллеры обычно похожи на показанный мной в примере - отображают список элементов или конкретный элемент, backend - производит CRUD(отображение\создание\изменение\удаление) действия на элементами, поэтому можно пойти дальше и создать универсальные контроллеры, для сложных задач расширять их, а совсем нестандартные уже создавать отдельно. Как будет время напишу такие вот универсальные контроллеры) |
Автор: | WinterSilence [ 18 сен 2013, 00:51 ] |
Заголовок сообщения: | Re: Умные контроллеры |
Слегка улучшил код. Теперь можно производить поиск сразу по нескольким параметрам и не требуется параметр $deny_load_model_actions, для удобства код автозагрузки модели вынесен в отдельный метод. Код:
Упрощенный пример использования: Код:
http://site.ru/element/ Выводит список элементов http://site.ru/element/item/zelenie_tapki Выводит конкретный элемент http://site.ru/element/config Конфигурирование страницы |
Автор: | WinterSilence [ 18 сен 2013, 00:56 ] |
Заголовок сообщения: | Re: Умные контроллеры |
Отложим пока CRUD контроллеры, с ними более-менее все ясно и обсудим вот что: HMVC Матрёшка Наконец полностью сформировалась в голове идея организации базового контроллера моей CMS, чем и спешу поделиться Каждая страница представляет собой слой(шаблон) на котором размещены виджеты и сниппеты: Код:
CMS::snippet('main_content') - вывод основного контента также реализован сниппетом. CMS::widget - виджет. Реализует запрос(request) к контроллеру виджета и выводит полученный контент, опять же используем метод-обертку т.к. он кроме этого будет иметь дополнительный функционал. Такой поход позволит легко изменять структуру разделов-страниц, а также добавлять новые. В идеале планирую сделать визуальный редактор дизайна в админке (аля http://jqueryui.com/sortable/#portlets). Создание сайта будет при таком подходе выглядеть следуюшим образом: Создание слоёв. Например если дизайн главной страницы, отличается отличается от оформления внутренних, то для этого потребуется создать 2 шаблона. Добавление страниц(разделов). Каждая страница имеет 4 основных параметра:
layout - шаблон, используемый в качестве основы content - html текст страницы controller - контроллер страницы, формирующий основной контент. Имеет более широкий, по сравнению с виджетами, функционал. Например, методы для формирования meta данных страницы, поиска по разделу и создания sitemap(для frontend контроллеров). Данный параметр является необязательным CMS::snippet('main_content') представляет собой текст content + результат запроса к controller'y. Страницы будут иметь URL примерно следующего вида: `(/<slug>(/<page_action>(/<page_slug>)))` Например, http://site.ru/myblog/post/html5-lesson_1/ или http://site.ru/about_us/ Принцип работы:
Если у страницы задан параметр controller, то будет выполнен запрос(request). URL запроса формируется исходя из оставшихся параметров первичного запроса(slug удаляется) и значения controller. Полученный результат добляется к данных страницы. Выполняется рендеринг слоя. Формируется и возвращается контент страницы Например, при вызове `http://site.ru/myblog/post/html5-lesson_1/` происходит поиск страницы `myblog`, для которой задан controller blog(`content/page/blog`) - `content/<directory>/<controller>`, в результате получаем запрос `http://site.ru/content/page/blog/post/html5-lesson_1/`, вызывающий Controller_Page_Blog - action_post, в нем происходит поиск записи с идентификатором `html5-lesson_1`. Следующим шагом надо будет заменить отдельные контент controller'ы на контент-модули, которые будут группировать имеющийся функционал (например, модуль блога или форума). А также сделать редактирование content по аналогии с наполнением слоёв сниппетами и виджетами, но это вообще far, far away... Схематический код добавлю попозже, но вроде и так все довольно прозрачно вышло =) |
Автор: | WinterSilence [ 27 сен 2013, 00:40 ] |
Заголовок сообщения: | Re: Умные контроллеры |
HMVC Матрёшка - пример реализации Маршруты: Код:
SQL дамп таблицы со страницами Код:
Контроллер страниц (основной) Код:
Вид wrapper (обёртка для контента) Код:
Вид layout/home (слой для главной) Код:
Вид layout/default (слой для всех остальных страниц) Код:
Вид snippet/content (сниппет основного контента) Код:
Вспомогательный класс CMS Код:
|
Автор: | Sergey [ 24 окт 2013, 15:17 ] |
Заголовок сообщения: | Re: Умные контроллеры |
Сколько ты всего хорошего понаписал за моё отсутствие! Молодец, так держать |
Страница 1 из 1 | Часовой пояс: UTC + 4 часа [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |