【问题标题】:How to pass data to layout in Zend 2?如何在 Zend 2 中将数据传递给布局?
【发布时间】:2013-01-06 05:28:45
【问题描述】:

我环顾四周,在 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 移动布局。所以标题和内容是分开的,但结构应该是一样的(应该属于布局)。

【问题讨论】:

    标签: layout view zend-framework2


    【解决方案1】:

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

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

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

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

    在你的 layout.phtml 中:

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

    【讨论】:

    • 完美! getEvent 看起来对我想做的其他一些事情很有帮助。
    【解决方案2】:

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

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

    目前,这两种方法都适合您。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-22
      • 2012-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多