视图模型中的ZF2自定义方法可用于特定模板


ZF2 custom methods in view model available to specific template

在这方面找不到任何合理的答案。

在控制器中,返回ViewModel的实例,该实例可以包含子ViewModel。这很好,我明白了,但这些子块也需要变量,你可以在同一个控制器操作中设置这些变量。但是,如何避免长达11页的控制器操作呢?

例如,在Magento中,视图脚本派生自"块",这些块是具有特定方法来更改视图的类,因此您可以简单地获得子html,它将使用自己的方法独立处理自己。

实用(模板法):

<?php echo $this->getSidebar(); ?>

不切实际(ZF2控制器):

$leftSidebar = new ViewModel(...
$leftSidebarPostsWidget = new ViewModel(...
$leftSidebar->addChild($leftSidebarPostsWidget);
$view = new ViewModel();
$view->addChild($leftSidebar);    
return $view;

我研究了视图助手,但这些似乎对所有视图脚本都可用,这是不必要的。

是否有某种方法可以将自定义渲染类与特定模板相关联?

我可以创建扩展ViewModel的块类,但恐怕我只是缺少ZendFramework2中有用的东西。

我完全同意马歇尔之家的观点。我开发了几个magento模块,块解决方案真的很方便。

为了在Zend2中获得类似的功能,我在ViewModel中设置了一个名为let say"me"的变量,该变量包含一个具有所需方法的对象。在我的例子中,实际上对象包含ViewModel,只需做一点工作,你就可以制作一个与magento工作相同的树。

$blockModel->setVariable('me', $blockModel);

$blockModel本身有一个包含viewModel的属性,如果您构建一个树,其中

$blockModel->getParent();

返回父块,可以说:

$blockModel->getParent()->getViewModel()->addChild($blockModel->getViewModel());

在phtml模板中,只需调用$this->me->anyMethod()即可工作。

当然很棘手,但马根托不是一天建成的。。。