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

时间:2013-02-07 05:57:53

标签: php zend-framework2

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

在控制器中,您返回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中缺少一些有用的东西。

1 个答案:

答案 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不会在一天内建成......