1

我环顾四周,在 Zend 1 中最多有一些关于此的链接。我发现的最佳解决方案是

// controller:
return array('viewValue' => 'something');
// layout.phtml
$children = $this->viewModel()->getCurrent()->getChildren();
$viewValue = $children[0]->viewValue;

在布局上,但似乎有点笨拙。它甚至更奇怪,因为当我get_class_methods在布局上做时它没有显示viewModel()方法。基本上,我查看了 API(和源代码)并没有找到太多。Zend 1 似乎也有更多的访问权限;一些旧的解决方案涉及获取视图并直接修改它,但在 Zend 2 中,我们返回一个新数组(或视图模型)。有小费吗?

至于为什么,我使用的是 jQuery 移动布局。所以标题和内容是分开的,但结构应该是一样的(应该属于布局)。

4

2 回答 2

4

视图模型是分层构建的。顶层视图模型是“布局”,在调度控制器后注入子视图模型。这意味着您可以为您的应用程序构建相当多的模型树。

顶层视图模型(即代表布局的模型)也位于MvcEvent. 该对象在引导期间在应用程序中传递,但在控制器初始化时也链接到控制器。

MvcEvent 可以$this->getEvent()在控制器中访问,视图模型通过$event->getViewModel(). 因此,为了缩短事情的时间,只需执行以下操作:

controller MyController
{
  public function myAction()
  {
    $this->getEvent()->getViewModel()->foo = 'bar';
  }
}

在你的 layout.phtml 中:

<?php echo $this->foo; ?>
于 2013-01-06T10:01:21.547 回答
1

这几乎是,它是如何完成的。新的Zend\View-Components 几乎都是相互嵌套的 ViewModel。Rob Allen 写了一篇关于如何在整个 ViewModel 中使用变量的精彩文章。

此外,我通常认为这种方法不是最好的方法。最好有一个ViewHelper或一个Layout-Placeholder来做这项工作。再一次写了一篇很棒的文章,这次是我亲爱的 Bakura,又名 Michael Gallego。

目前,这两种方法中的任何一种都是您的选择。

于 2013-01-06T09:23:47.777 回答