我在學習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