我在学习ZF2.0 beta。在ZF1我们可以在控制器上的动态更改布局:更改Zend Framework 2.0控制器中的布局
Zend_Layout::getMvcInstance()->setLayout('layoutname');
但ZF2.0的Zend \布局类不具有法getMvcInstance()。我认为可以使用依赖注入来完成,但不确定。
我在学习ZF2.0 beta。在ZF1我们可以在控制器上的动态更改布局:更改Zend Framework 2.0控制器中的布局
Zend_Layout::getMvcInstance()->setLayout('layoutname');
但ZF2.0的Zend \布局类不具有法getMvcInstance()。我认为可以使用依赖注入来完成,但不确定。
ZF2正处于开发阶段,目前无法保证其工作方式,它将成为ZF2达到稳定状态时的工作方式。
然而,从Zend的\ MVC中的新视图层最近合并了,所以你应该可以(与当前主)现在做到这一点:
public function somethingAction()
{
// Do some intelligent work
$this->layout('layout/different');
}
您还必须设置在布局要么bootstrap或使用di时。迪例如:
'Zend\View\Resolver\TemplateMapResolver' => array(
'parameters' => array(
'map' => array(
'layout/different' => __DIR__ . '/../view/layout/different.phtml',
),
),
),
我发现在动作设置模板,最好的办法是这样的
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'
),
),
这将设置视图,但不是按作者问的布局。 – 2014-05-16 18:59:02
我试过了上面的提示。
public function somethingAction()
{
// Do some intelligent work
$this->layout('layout/different');
}
我用这段代码得到了正确的结果。
public function someAction() {
$viewModel = new ViewModel();
$viewModel->setTemplate('layout/custom');
return $viewModel;
}
它提取了两个布局(默认&当前模块)。
我遇到了同样的结果。我认为区分布局和模板非常重要。为了改变布局,我们应该使用$ this-> layout('layout/different');而不是setTemplate函数。 – 2014-03-05 05:40:09
代码将在您的代码片段中设置将渲染的视图,而不是布局。 – 2014-05-15 22:52:57
public function someAction() {
$layout = $this->layout();
$layout->setTemplate('layout/custom');
$viewModel = new ViewModel();
return $viewModel;
}
改变现有布局时多种布局的完美解决方案 – 2013-09-05 23:42:53
看起来像工作,但ID不适用于我:([image](http://i.gyazo.com/2082ae68e20ade4edee81858f6ae9b8f.png))显示我的代码。不知道为什么它不起作用:'( – 2014-05-15 22:48:59
我想使用这种方法,但我没有得到结果。布局仍然是标准布局(布局/布局)。为什么它不起作用?你可以阅读更多关于我的问题[这里](http://stackoverflow.com/questions/23690184/how-to-change-layout-in-controller-in-zendframework2)。 – 2014-05-16 19:26:35