2010-01-25 140 views
5

我有一个从Zend_Form扩展的表单。我把形式为ViewScript装饰这样的: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)))); 

任何有关如何完成这项任务的帮助将不胜感激。

感谢

回答

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']

H TH :)

+0

我个人发现你提供的第二种方法比第一种方法更有效。谢谢:) – jjmu15 2012-06-08 15:42:40

2

还有另外几个可能的方式来实现增加一个形式,我想你应该考虑内部的图标,

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

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

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

部分视图帮助程序可以极大地增加您的表单的内存和时间开销(这种方式已经相当大),当您在元素上使用视图装饰器而不是在整个表单上时,这会加剧!

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

Mohannad

+0

我在三天前找到了这个问题的答案。 你帮了我很多! 谢谢! 我很糟糕英语,很抱歉。 – 2013-03-29 16:48:01