2

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

在控制器中,您返回一个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 的块类,但恐怕我只是错过了 Zend Framework 2 中有用的东西。

4

1 回答 1

2

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

为了在 Zend2 中获得类似功能,我所做的是在 ViewModel 中设置一个变量,命名为“我”,其中包含具有所需方法的对象。在我的例子中,实际上该对象包含 ViewModel,并且只需一点​​点工作,您就可以制作与 magento 一样的树。

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

$blockModel 本身有一个保存 viewModel 的属性,如果你在其中构建一棵树

$blockModel->getParent();

返回父块,你可以说:

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

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

当然很棘手,但magento不是一天建成的......

于 2013-05-13T22:44:42.683 回答