繁体   English   中英

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()方法,可以代理render()调用,该方法实例化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配置键,并且不会进行硬编码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM