具有局部视图的Zend_Layout - 通过索引控制器设置值

opH*_*AME 1 php zend-framework

我想我看不到树上的树..

我使用Zend Framework,其中layout.phtml是渲染和部分

<?php echo $this->partial('_header.phtml') ?>
Run Code Online (Sandbox Code Playgroud)

我的目标是将我的IndexController中的表单呈现为"_header.phtml"

<?php echo $this->form; ?>
Run Code Online (Sandbox Code Playgroud)

如何将表单传递给局部视图?

jas*_*son 9

使用干净的变量范围呈现视图partials ...也就是说,它们不会从调用Zend_View实例继承视图变量.

这里有几个选项:

一,简单地打电话:

echo $this->render('_header.phtml');
Run Code Online (Sandbox Code Playgroud)

而不是使用部分.此文件可以访问所有视图变量,因此您只需将表单分配给控制器中的视图,就像其他任何内容一样.

另一种方法是将表单显式作为变量传递给partial,如下所示:

echo $this->partial('_header.phtml', array('form' => $this->form));
// $this->form inside your partial will be your form
Run Code Online (Sandbox Code Playgroud)

您的另一个选择是使用占位符或布局响应段.这是占位符的示例:

在您的_header.phtml或布局中...您希望表单呈现在哪里:

<?php echo $this->placeholder('header'); ?>
Run Code Online (Sandbox Code Playgroud)

在你的控制器中:

$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.
Run Code Online (Sandbox Code Playgroud)

这有一个额外的好处,即不会使用一次性变量(如表单)污染您的视图实例.

注意:我会在ZF网站备份后立即链接到手册页; 1.9今天发布,所以该网站目前正在更新.

这是一些相关的手册页: