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