ZF2视图插件管理器未合并配置


ZF2 view plugin manager not merging config

在我的module.config.php中,我有如下内容:

 return [
       'view_helpers' => [
           'invokables' => [
               'mycustomviewhelper' => 'Namespace'View'Helper'MyCustomViewHelper',
           ],
       ],
   ];

我也有一个实用程序类,将处理呈现一个帮助器的责任。比如Zend'Paginator.

Zend'Paginator有一个__toString()方法,代理渲染()调用,它实例化View'Renderer'PhpRenderer(),然后调用$view->paginationControl($this)

我试图在我的实用程序类中复制类似的功能,它具有与Zend'Paginator已经做的类似的策略,唯一不同的是我的视图助手是自定义的。因此,我的代码看起来像:

$view->MyCustomViewHelper($this);

这不起作用,因为PhpRenderer忽略了手动定义的配置,并在getHelperPluginManager中执行以下操作:

$this->setHelperPluginManager(new HelperPluginManager());

我已经尝试调用已经在ViewHelperManager中定义的助手,这工作得很好。

我确实尝试事先合并配置,然后在视图中设置PhpRenderer,但这会导致其他问题,例如我的部分未找到等。

现在我的问题是为什么ZF不考虑任何自定义注册视图时,试图在孤立地呈现它。还有别的办法吗?

谢谢。

是的,经过一些调试和配置后,我能够使其工作。仍然不确定这是否是最好的方法,但目前看来没有其他方法可以让它工作。

我为实用程序类创建了一个工厂,实例化了PhpRenderer,然后在我的配置中手动合并了ViewPluginManager。我的工厂现在看起来像:

public function createService(ServiceLocatorInterface $serviceLocatorInterface) 
{
    $dataTable = new DataTable;
    $phpRenderer = new PhpRenderer();
    $config = new 'Zend'ServiceManager'Config([
        'invokables' => [
            'datatablerenderer' => 'DataTable'View'Helper'DataTableRenderer'
        ],
    ]);
    $phpRenderer->setHelperPluginManager(new HelperPluginManager($config));
    $dataTable->setView($phpRenderer);
    return $dataTable;
}

然而,必须重构这一点,使配置来自view_helpers配置键,而不是硬编码。