Частицы представления отображаются с чистой областью действия переменных ... То есть они не наследуют переменные представления от вызывающего экземпляра Zend_View
.
Здесь доступно несколько вариантов:
Один, просто позвони:
echo $this->render('_header.phtml');
вместо использования частичного. Этот файл будет иметь доступ ко всем переменным вашего представления, поэтому вы можете просто назначить форму для вашего представления в вашем контроллере, как и все остальное.
Другой способ - явно передать вашу форму как переменную частичному, например, так:
echo $this->partial('_header.phtml', array('form' => $this->form));
// $this->form inside your partial will be your form
Другой вариант - использовать заполнители или сегменты ответа макета. Вот пример заполнителей:
В вашем _header.phtml
или макете ... где бы вы ни хотели, чтобы форма отображалась:
<?php echo $this->placeholder('header'); ?>
А в вашем контроллере:
$this->view->placeholder('header')->append($form);
// I'm not sure, but you _may_ want to pass in $form->render() here.
// I can't remember if implode() (which is used in placeholders internally)
// will trigger the __toString() method of an object.
Это дает дополнительный бонус - не загрязняет ваш экземпляр вида одноразовыми переменными, такими как форма.
Примечание: я буду ссылаться на страницы справочника, как только сайт ZF вернется; 1.9 запускается сегодня, поэтому сайт обновляется в настоящее время.
Вот некоторые соответствующие справочные страницы: