5

我有一个从 Zend_Form 扩展而来的表单。我将表单放入 ViewScript 装饰器中,如下所示:

$this->setDecorators(array(array('ViewScript', array('viewScript' => 'game/forms/game-management.phtml'))));

我想将一个变量传递给这个 ViewScript,但不确定如何做到这一点。

由于部分渲染为 Zend_View(允许 $this->app_store_icon 进行渲染),似乎应该有一种方法可以传递要渲染的变量。我尝试了以下但无济于事。

$this->setDecorators(array(array('ViewScript', array('viewScript' => 'game/forms/game-management.phtml'),array('app_store_picon'=>$current_app_store_picon))));

任何有关如何完成此操作的帮助将不胜感激。

谢谢

4

3 回答 3

10

这个有点棘手,我花了半个小时才弄明白,但可以做到:)

关键是,您将选项传递给ViewScript装饰器而不是元素。添加选项:

$this->setDecorators(array(array('ViewScript', array(
    'viewScript' => 'test.phtml',
    'foo'=>'baz',
))));

或一系列选项:

$this->setDecorators(array(array('ViewScript', array(
    'viewScript' => 'test.phtml',
    array(
        'foo'=>'baz',
        'spam'=>'ham',
    ),
))));

在部分中得到它,test.phtml

$option = $this->element->getDecorator('ViewScript')->getOptions();

在第一种情况下,通过一个选项,它将是$option['foo'],在第二种情况下,它将是$option[0]['foo']

HTH :)

于 2010-01-25T20:56:56.250 回答
2

我需要将指示分数状态的 html 代码传递给 viewscript.phtml 文件。我找到了一种比将它与装饰器一起传递更简单的方法,即通过从控制器的操作中传递值,就好像你将它传递给普通的 zend 视图脚本一样。例如:

<Controller>
// pass status and score to view
$this->view->status = $this->_sitenamehelper->get_status($id);
$this->view->score = $this->_sitenamehelper->get_score($id);

<viewscript.phtml partial file>
<?php $form = $this->element; ?>
<b>Status: </b><?php echo $form->getView()->status; ?>
<b>Score: </b><?php echo $form->getView()->score; ?>

在那里你可以传递任何 html 呈现的代码..我想它适用于图标..

莫罕纳德

于 2012-03-15T14:13:04.760 回答
2

还有另外几种可能的方法来实现在表单中添加图标,我认为你应该考虑,

一种是添加您自己的元素类型,并为图标添加自定义装饰器(我这样做是为了添加简单的 ? 图标以获取帮助,或文件浏览器以形成元素)。这是一件相当简单的事情。

另一种方法是简单地将 HtmlTag 装饰器添加到您的元素中,您可以将 src 等属性指定为选项。

这两个解决方案实际上带来了另一个隐藏的好处,除了使事情更易于管理之外,它们还删除了部分视图助手的使用,该助手用于每个正在使用的视图脚本装饰器。

部分视图助手可以极大地增加表单的内存和时间开销(顺便说一句,这已经相当大了),当您在元素上而不是整个表单上使用 viewscript 装饰器时,这种情况会更加严重!

于 2010-04-27T07:17:11.700 回答