2012-02-02 65 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

相關問題