2012-10-04 70 views
1

我在我的zendframework 2應用程序中有一個模塊,它包含兩個控制器。 我想爲其中一個控制器的操作設置不同的佈局。 有沒有辦法在模塊配置文件中設置它? P:我只是嘗試使用以下命令將其設置在控制器的__CONSTRUCT方法中,但它沒有起作用!控制器在ZendFramework 2中的具體佈局

$event = $this->getEvent(); 
$event->getViewModel()->setTemplate('layout/MYLAYOUT'); 

但是,如果我在我的控制器的每個動作內使用上述命令它只是工作正常。

回答

2

我可以將您指向正確的方向,因爲目前我無法打開示例項目。 Evan Coury發佈了模塊特定佈局的方法。請訪問以下鏈接:

Module Specific Layouts in Zend Framework 2

<?php 
namespace MyModule; 

use Zend\ModuleManager\ModuleManager; 

class Module 
{ 
    public function init(ModuleManager $moduleManager) 
    { 
     $sharedEvents = $moduleManager->getEventManager()->getSharedManager(); 
     $sharedEvents->attach(__NAMESPACE__, 'dispatch', function($e) { 
      // This event will only be fired when an ActionController under the MyModule namespace is dispatched. 
      $controller = $e->getTarget(); 
      $controller->layout('layout/alternativelayout'); 
     }, 100); 
    } 
} 

現在怎麼會變成這樣可以幫助您?:嗯,$controller應該有兩個叫控制器和動作存儲。我相信你可以檢查$controller的被調用的行動,然後相應地分配佈局。

對不起,我目前只能提示你進入方向,但我確定這可以讓你開始。

+0

嗯,我認爲這將改變佈局整個模塊,而不是一個特定的控制器 – Behzadsh

2

請參閱akrabat's examples瞭解佈局,視圖等等可以輕鬆調整的很多好方法。請致電his github here

這裏是控制器的操作方法,設置/剪切 - 粘貼使用備用佈局:

public function differentLayoutAction() 
{ 
    // Use a different layout 
    $this->layout('layout/different'); 

    return new ViewModel(); 
} 

編輯:它看起來像akrabat有說Change the layout for every action within a module,這可能會給一個例子用於在配置中設置佈局的最佳指針;但我只是看了一下代碼,這個例子目前還沒有完成,它不會改變佈局。

0

@山姆的回答幾乎回答了這個問題。至於說,它只是需要在其控制器被稱作檢查,它可以這樣做:

<?php 
namespace MyModule; 

use Zend\ModuleManager\ModuleManager; 

class Module 
{ 
    public function init(ModuleManager $moduleManager){ 
     $sharedEvents = $moduleManager->getEventManager()->getSharedManager(); 
     $sharedEvents->attach(__NAMESPACE__, 'dispatch', function($e) { 
       $controller = $e->getTarget(); 
       if ($controller instanceof Controller\AltLayoutController) { 
        $controller->layout('layout/alternativelayout'); 
       } 
      }, 100); 
    }