ZF2自定义视图助手跨多个元素共享变量 - 共享服务问题?

时间:2014-06-25 12:13:30

标签: zend-framework2 view-helpers servicemanager viewhelper

我成功添加了一个具有以下配置的自定义视图助手:

https://gist.github.com/webdevilopers/b22f7471fd2b8d60cdea#file-module-php

视图助手有一个名为foo的自定义变量:

https://gist.github.com/webdevilopers/b22f7471fd2b8d60cdea#file-abstractformautocomplete-php

正如我所提到的,只要我只使用一个元素,使用视图帮助程序,此设置就可以正常工作。

只要我添加多个表单元素,setFoo方法只会被调用一次,并且foo变量在以下元素中保持设置。

https://gist.github.com/webdevilopers/b22f7471fd2b8d60cdea#file-autocompleteform-php

我在 ZF2 中读到了共享服务 - 是这样的吗?我该如何防止这种行为?

Introduction to the Zend Framework 2 ServiceManager

By default, the ServiceManager assumes all services are shared, but you may specify a boolean false value here to indicate a new instance should be returned.

1 个答案:

答案 0 :(得分:2)

你基本上已经回答了自己的问题。默认情况下,服务是共享的,因此视图助手的初始实例将重复用于后续调用,除非您另外配置它​​。为此,请将shared参数添加到视图助手配置(未测试):

public function getViewHelperConfig()
{
    return array(
        'invokables' => array(
            'formelement'                  => 'Application\Form\View\Helper\FormElement',
            'formautocompletehidden'       => 'Application\Form\View\Helper\FormAutocompleteHidden'
        ),
        'shared' => array(
            'formelement' => false,
            'formautocompletehidden' => false
        ),
    );
}

编辑,如评论中所述,由于ZF2中存在错误,目前不适用于视图助手。