如何将数据传递到Zend 2中的布局?

时间:2013-01-06 05:28:45

标签: layout view zend-framework2

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

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

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

至于为什么,我正在使用jQuery移动布局。因此标题与内容是分开的,但结构应该相同(应该属于布局)。

2 个答案:

答案 0 :(得分:4)

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

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

可以通过控制器中的$this->getEvent()访问MvcEvent,$event->getViewModel()可以访问视图模型。所以简而言之,就这样做:

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

在你的layout.phtml中:

<?php echo $this->foo; ?>

答案 1 :(得分:1)

这就是它如何完成的。新的Zend\View - 组件几乎都是彼此嵌套的ViewModels。 Rob Allen写了一篇关于如何在整个ViewModel中使用变量的great article

此外,我经常认为这种方法不是最好的方法。拥有ViewHelperLayout-Placeholder来完成这项工作要好得多。我的亲爱的Bakura,又名Michael Gallego,再一次写了great article

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