【问题标题】:ZF2 view plugin manager not merging configZF2 视图插件管理器不合并配置
【发布时间】:2015-05-25 17:21:28
【问题描述】:

在我的 module.config.php 上我有类似的东西:

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

我还有一个实用类来处理渲染助手的职责。 Zend\Paginator 之类的东西。

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

我试图在我的实用程序类中复制类似的功能,它与 Zend\Paginator 已经做的策略相似,唯一不同的是我的视图助手是自定义的。因此,我的代码如下所示:

$view->MyCustomViewHelper($this);

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

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

我已经尝试调用已经在 ViewHelperManager 中定义的帮助程序,并且效果很好。

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

现在我的问题是,为什么 ZF 在尝试单独渲染它时不考虑任何自定义注册视图。有没有其他方法可以做到这一点?

谢谢。

【问题讨论】:

    标签: php zend-framework pagination view-helpers


    【解决方案1】:

    是的,经过一些调试和配置,我能够完成这项工作。仍然不确定这是否是最好的方法,但目前似乎没有其他方法可以让它发挥作用。

    我为实用程序类创建了一个工厂,实例化了 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 配置键并且不是硬编码的。

    【讨论】:

      猜你喜欢
      • 2018-06-02
      • 1970-01-01
      • 1970-01-01
      • 2016-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-01
      相关资源
      最近更新 更多