Zend_Layout: с MVC и без.
Zend_Layout-а,
и доступ к ним может быть произведен через
помощника
меток заполнения, либо путем извлечения их как свойств
объекта макета посредством помощника макета.
Zend_Layout использует Zend_View
для рендеринга, то вы можете использовать любые зарегистрированные
помощники видов, а также обращаться к любым установленным ранее
переменным вида.
Особенно полезны различные помощники меток
заполнения, так как они позволяют извлекать содержимое
таких областей, как раздел <head>, навигация и т.п.:
Zend_Controller предлагает богатый набор
возможностей для расширения посредством
плагинов
фронт-контроллера и помощников действий.
Zend_View тоже имеет своих
помощников.
Zend_Layout использует возможности такого расширения
при использовании с компонентами MVC.
Zend_Layout::startMvc() создает экземпляр
Zend_Layout с любой предоставленной вами конфигурацией
(опционально). Затем он регистрирует плагин фронт-контроллера,
который производит рендеринг макета с любым содержимым приложения
сразу, как только завершается цикл диспетчеризации, регистрирует
помощник действия для доступа к объекту макета из ваших контроллеров
действий. Кроме этого, вы можете в любой момент времени извлечь
экземпляр макета внутри скрипта вида, используя помощник вида
layout.
startMvc() может принимать массив опций или объект
Zend_Config для настойки экземпляра. Эти опции описаны
в layout. Этот помощник вида немного
отличается от остальных тем, что не принимает аргументов и
возвращает объект вместо строкового значения. Это позволяет сразу
вызывать методы объекта макета:
Zend_Layout, используя статический метод
getMvcInstance():
Zend_Layout-а
имеет одну ценную возможность в дополнение к рендерингу самого
макета: он извлекает все именованные сегменты из объекта ответа и
устанавливает их как переменные макета, при этом сегмент 'default'
присваивается переменной 'content'. Это позволяет иметь доступ к
содержимому приложения и производить его рендеринг в вашем скрипте
вида.
FooController::indexAction(), который производит
рендеринг некоторого содержимого в используемый по умолчанию сегмент
ответа и затем производит переход к действию
NavController::menuAction(), который рендерит
содержимое в сегмент 'nav' объекта ответа. Наконец, вы производите
переход к действию CommentController::fetchAction() и
извлекаете комментарии, но их рендеринг производится в
используемый по умолчанию сегмент (комментарии добавляются в конец
уже имеющегося содержимого). Ваш скрипт вида может затем произвести
их рендеринг по отдельности: