zend_form ViewScript装饰器/传递参数

时间:2010-01-25 19:44:58

标签: php zend-framework zend-form zend-view

我有一个从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))));

如何完成任何帮助将不胜感激。

感谢

3 个答案:

答案 0 :(得分: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:)

答案 1 :(得分:2)

还有另外两种方法可以在表单中添加图标,我认为你应该考虑,

一个是添加你自己的元素类型,并为图标添加一个自定义装饰器(我这样做是为了添加简单的图标,接下来是帮助,或者是文件浏览器来形成元素)。这是一件相当简单的事情。

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

这两个解决方案实际上带来了另一个隐藏的好处,使得管理更简单,它们还删除了部分视图助手的使用,对于每个使用的viewcript装饰器都使用了一次。

部分视图助手可以极大地增加你的表单的内存和时间开销(顺便说一下已经相当大),当你在元素而不是整个表单上使用viewscript装饰时,这会加剧!

答案 2 :(得分:2)

我需要将一个指示分数状态的html代码传递给viewscript.phtml文件。我发现了一种更简单的方法,而不是将它与装饰器一起传递,这是通过从控制器的动作传递值,就像将它传递给普通的zend视图脚本一样。 e.g:

<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呈现的代码..我猜它适用于图标..

Mohannad