2012-02-02 95 views
25

我在学习ZF2.0 beta。在ZF1我们可以在控制器上的动态更改布局:更改Zend Framework 2.0控制器中的布局

Zend_Layout::getMvcInstance()->setLayout('layoutname'); 

ZF2.0的Zend \布局类不具有法getMvcInstance()。我认为可以使用依赖注入来完成,但不确定。

回答

58

ZF2正处于开发阶段,目前无法保证其工作方式,它将成为ZF2达到稳定状态时的工作方式。

然而,从Zend的\ MVC中的新视图层最近合并了,所以你应该可以(与当前主)现在做到这一点:

public function somethingAction() 
{ 
    // Do some intelligent work 

    $this->layout('layout/different'); 
} 
+1

我想使用这种方法,但我没有得到结果。布局仍然是标准布局(布局/布局)。为什么它不起作用?你可以阅读更多关于我的问题[这里](http://stackoverflow.com/questions/23690184/how-to-change-layout-in-controller-in-zendframework2)。 – 2014-05-16 19:26:35

3

您还必须设置在布局要么bootstrap或使用di时。迪例如:

'Zend\View\Resolver\TemplateMapResolver' => array(
     'parameters' => array(
      'map' => array(
      'layout/different' => __DIR__ . '/../view/layout/different.phtml', 
      ), 
     ), 
    ), 
8

我发现在动作设置模板,最好的办法是这样的

public function someAction() { 
    $viewModel = new ViewModel(); 
    $viewModel->setTemplate('layout/custom'); 

    return $viewModel; 
} 

在你module.config.php确保您设定了相应的template_map路径。

'view_manager' => array(
    'template_map' => array(
     'layout/custom' => __DIR__ . '/../view/layout/custom.phtml' 
    ), 
), 
+5

这将设置视图,但不是按作者问的布局。 – 2014-05-16 18:59:02

3

我试过了上面的提示。

public function somethingAction() 
{ 
    // Do some intelligent work 

    $this->layout('layout/different'); 
} 

我用这段代码得到了正确的结果。

public function someAction() { 
    $viewModel = new ViewModel(); 
    $viewModel->setTemplate('layout/custom'); 

    return $viewModel; 
} 

它提取了两个布局(默认&当前模块)。

+0

我遇到了同样的结果。我认为区分布局和模板非常重要。为了改变布局,我们应该使用$ this-> layout('layout/different');而不是setTemplate函数。 – 2014-03-05 05:40:09

+0

代码将在您的代码片段中设置将渲染的视图,而不是布局。 – 2014-05-15 22:52:57

7
public function someAction() { 
    $layout = $this->layout(); 
    $layout->setTemplate('layout/custom'); 
    $viewModel = new ViewModel(); 
    return $viewModel; 
} 
+0

改变现有布局时多种布局的完美解决方案 – 2013-09-05 23:42:53

+0

看起来像工作,但ID不适用于我:([image](http://i.gyazo.com/2082ae68e20ade4edee81858f6ae9b8f.png))显示我的代码。不知道为什么它不起作用:'( – 2014-05-15 22:48:59