在任何地方找不到任何合理的答案。
在控制器中,您返回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中缺少一些有用的东西。
答案 0 :(得分:2)
我完全同意马歇尔大厦。我开发了几个magento模块,块解决方案非常方便。
我在Zend2中获得类似功能的方法是在ViewModel中设置一个变量,名为“me”,其中包含一个具有所需方法的对象。在我的情况下,实际上该对象包含ViewModel,通过一些工作,您可以使树与magento工作相同。
$blockModel->setVariable('me', $blockModel);
$ blockModel本身有一个包含viewModel的属性,如果你构建了一个树
$blockModel->getParent();
返回父块,你可以说:
$blockModel->getParent()->getViewModel()->addChild($blockModel->getViewModel());
在您的phtml模板中,您只需拨打$this->me->anyMethod()
即可使用。
当然是棘手的,但是magento不会在一天内建成......