zend_form ViewScript装饰器/传递参数

tim*_*one 5 php zend-framework zend-form zend-view

我有一个从Zend_Form扩展的表单.我将表单放入这样的ViewScript装饰器中:

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

我想将一个变量传递给这个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))));
Run Code Online (Sandbox Code Playgroud)

任何有关如何完成此任务的帮助将不胜感激.

谢谢

小智 10

这个有点棘手,花了我一个半小时来搞清楚,但是可以做到:)

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

$this->setDecorators(array(array('ViewScript', array(
    'viewScript' => 'test.phtml',
    'foo'=>'baz',
))));
Run Code Online (Sandbox Code Playgroud)

或一系列选项:

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

在部分中得出结论test.phtml:

$option = $this->element->getDecorator('ViewScript')->getOptions();
Run Code Online (Sandbox Code Playgroud)

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

HTH :)