代码之家  ›  专栏  ›  技术社区  ›  timpone

zend_form viewsscript decorator/传递参数

  •  5
  • timpone  · 技术社区  · 14 年前

    我有一个从Zend_窗体扩展而来的窗体。我将表单放入这样的ViewScript装饰器:

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

    我想将一个变量传递给这个viewscript,但不确定如何实现。

    由于部分渲染为Zend_视图(允许$this->app_store_图标进行渲染),因此似乎应该有一种方法来传递要渲染的变量。我试过以下方法,但没有用。

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

    如能为您提供帮助,我们将不胜感激。

    谢谢

    3 回复  |  直到 12 年前
        1
  •  10
  •   Stephen Fuhry Bobby    12 年前

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

    关键是,您要将选项传递给 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:)

        2
  •  2
  •   Bittarman    14 年前

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

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

    另一种方法是简单地向元素添加一个htmltag修饰符,您可以将src等属性指定为选项。

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

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

        3
  •  2
  •   Operations    12 年前

    我需要将指示分数状态的HTML代码传递给viewscript.phtml文件。我发现了一种比将其与decorator一起传递更简单的方法,即将控制器操作中的值传递给普通Zend视图脚本,就像传递给普通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呈现的代码。我想它对图标有用。

    穆罕默德