[英]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.