我环顾四周,并且在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移动布局。因此标题与内容是分开的,但结构应该相同(应该属于布局)。
答案 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。
此外,我经常认为这种方法不是最好的方法。拥有ViewHelper
或Layout-Placeholder
来完成这项工作要好得多。我的亲爱的Bakura,又名Michael Gallego,再一次写了great article。
目前,这些方法中的任何一种都是您的选择。