Я не могу понять, когда использовать переменные Layout и когда использовать переменные View для получения сегментов страницы на странице. Вот изображение формы их учебник по Layout ( $this означает экземпляр View везде): 
Почему элементы Navigation , Content и Sidebar получаются в виде переменных Layout ?
$this->layout()->nav;
Но HeadTitle , HeadScript , HeadStylesheet получаются прямо из представления?
$this->headTitle(); // I know that this is a placeholder view helper. // But this segment of the page logically belongs to Layout. // and it has to be called smth like view->layout->placeholder
И почему Header и Footer – это partial метод свойств View но не Layout ?
$this->partial('header.phtml');
Я попытался их изменить, и оба способа работают нормально:
echo $this->nav; // I assigned navigation segment script to the View and it works;
Я попытался назначить сценарий сегмента Footer для Layout и он также работает:
$layout->footer = $footer; echo $this->layout()->footer; // it also works, it's displayed on the page
Любой из способов может быть применен к любой переменной на странице. Например, в Navigation меня есть много переменных для отображения, и я могу их выводить с помощью обоих способов: одна переменная как свойство Layout , другая – свойство « View ».
Итак, каково правило использовать их правильно? Когда я должен использовать переменные View и когда Layout ?
Я согласен с тем, что это не очень понятно из документации, и я не думаю, что вообще-то объясняется это $this->layout()->nav . Несколько моментов, которые могут помочь:
$this->layout() на самом деле является вызовом помощника вида макета, который возвращает текущий экземпляр Zend_Layout . Zend_Layout регистрирует свой собственный помощник-заполнитель (с ключом «Zend_Layout») и по умолчанию создает в нем переменную «content». Zend_Layout имеет волшебный метод __get() который проксирует любую переменную-переменную участника в свой зарегистрированный контейнер-заполнитель. Поэтому вызов $this->layout()->content – это еще один способ записи $this->placeholder('Zend_Layout')->content Zend_Layout также имеет волшебный __set() который __set() сохраненные данные в класс-заполнитель. Таким образом, $layout->footer = 'foo' совпадает с вызовом $this->placeholder('Zend_Layout')->footer = 'foo' in the view С этим в мыслях:
Почему элементы навигации, содержимого и боковой панели получаются в виде переменных макета?
Поскольку они получают доступ к данным, хранящимся в заполнитель Zend_Layout . Вы также можете использовать $this->placeholder('Zend_Layout')->content
Но HeadTitle, HeadScript, HeadStylesheet получаются прямо из представления?
Это помощники просмотра.
И почему верхний и нижний колонтитулы – это частичный метод свойств View, но не Layout?
Это стандартный способ доступа к содержимому из других шаблонов.
В общем случае предположим, что использование объекта view является правильным способом доступа к данным. Используйте объект макета / помощник, только если вы знаете, что данные находятся в макете.
Преимущество использования заполнителей над частицами заключается в том, что вы можете получить доступ и изменить их в нескольких разных местах, в том числе в самом представлении. Например, у вас есть боковая панель, которая хранится в частичном. Если вы вместо этого сохранили это в Zend_Layout placeholder (например, в плагине контроллера), вы можете переопределить это для определенных действий в контроллере:
public function someAction() { $this->view->layout()->sidebar = 'Some other sidebar content'; }
или в самом скрипте вида:
<?php $this->layout()->sidebar = 'Content for this page only'; ?>