View занимается отображением данных. В качестве View по-умолчанию используется шаблонную систему WACT, набор собственных дополнительных тегов и компонентов для этой системы и небольшую прослойку классов, которые обеспечивают взаимодействие контроллера и шаблонизатора.
View состоит из двух основных компонентов - это класс lmbView и интерфейс lmbRenderer.
lmbView - это по сути контейнер с данными, который всегда доступен через toolkit. В этот контейнер посредством метода set() можно добавлять любые данные. Потом эти данные попадут в шаблон при помощи какого-либо lmbRenderer-а.
$view = lmbToolkit :: getView(); $view->set('any_value', $value);
Также lmbView содержит метод для указания, какой шаблон должен использоваться при рендеринге:
$view = lmbToolkit :: getView(); $view->setTemplate('news/display.html');
Команды, которые обычно работают с lmbView, не должны заботиться о том, когда в действительности будет проведен рендеринг шаблона. Для рендеринга шаблона используется lmbViewRenderingFilter, который ставится в общую цепочку фильтров. Этот фильтр получает объект, реализующий интерфейс lmbRenderer в конструкторе. Если renderer не указан, по-умолчанию, используется lmbWACTRenderer, который отображает (рендерит) WACT-шаблон.
Существует 2 основных способа передачи данных в шаблоны:
В приложениях, построенных на Limb, возможно поддерживать оба вида взаимодействия.
Использование методов класса lmbView :: set() - это есть пример использования PushView. PushView используется для передачи данных с форм (ошибки валидации, первоначальные данные) в шаблон, а также в некоторых других, когда использование PullView нецелесообразно. В остальных случаях чаще используется PullView, так как этот способ для большинства реализуемых нами проектов кажется удобнее.
Почему так было сделано? Мы считаем, что в большинстве web-проектов View гораздо более независимая часть системы, чем в традиционных приложениях. Поэтому, лучше, чтобы у остальной части системы было меньше зависимостей от View. Отображение изменяется гораздо чаще чем функциональность, оно также чаще более разнообразно, чем функциональная часть.
Для работы в рамках PullView в Limb существует такое понятие как lmbFetcher и специальные <fetch> теги, например <fetch>. При помощи этих классов шаблон может делать запросы к базе данных самостоятельно.
Также в шаблоне доступно содержимое Запроса (при использовании стандартного фильтра lmbViewRenderingFilter). Для этого можно использовать след. выражения шаблонной системы WACT:
Action = {$#request.action}, News id = {$#request.news_id}
Обсуждение