3

如何讓我的ZF2模塊爲特定控制器加載其他佈局文件?針對不同控制器的不同佈局文件

考慮您的ZF2應用模塊中有IndexControllerAdminControllerIndexController使用layout.phtml但要使用adminlayout.phtmlAdminController

這怎麼可能?

回答

7
class Module { 
    public function onBootstrap($e) { 
     $em = $application->getEventManager(); 

     $em->attach(MvcEvent::EVENT_DISPATCH, function($e) { 
      $controller = $e->getTarget(); 
      if ($controller instanceof Controller\AdminController) { 
       $controller->layout('layout/layoutadmin.phtml'); 
      } else { 
       $controller->layout('layout/layout.phtml'); 
      } 
     }); 
    } 
} 

,不要忘記在你的模塊配置文件中添加該配置來註冊新的控制器:

'controllers' => array(
    'invokables' => array(
     'Application\Controller\Index' => 'Application\Controller\IndexController', 
     'Application\Controller\Admin' => 'Application\Controller\AdminController', 
    ), 
), 
+2

只是想讀其他人可能會閱讀是。如果你認爲你需要不同的佈局,那麼在你的構架中可能會有一些改進。一般來說你只需要一個佈局。如果你需要兩種佈局,也許你應該有兩個獨立的應用程序(或兩個單獨的入口點)。或者,也許你需要更深思熟慮地使用新的ZF2嵌套視圖模型系統......只是想法。 – superdweebie 2012-08-12 22:22:47

+0

也許它是很好的使用A模塊索引然後一個模塊管理 – 2012-08-14 09:40:41

+0

我已經修復了你的標記。提供一個解釋和利用這個解決方案會改善這個答案很多。 (例如,爲什麼或爲什麼不這樣做而不是手動指定控制器中的佈局?) – Matsemann 2012-08-14 11:50:41

1

等最佳解決方案:

'view_manager' => array(
     'template_path_stack' => array(
      'YOURMODULENAME' => __DIR__ . '/../view', 
     ), 

     'template_map' => array(
      'layout/layout'   => __DIR__ . '/../view/layout/layout.phtml', 
     ), 
    ), 

變化YOURMODULENAME到您的模塊專用名稱

+0

我正在嘗試這個,但是不工作,它真的不在乎'佈局/佈局' – albanx 2013-04-18 14:25:32

+0

你應該確認路由器是你的路由輔助模塊用於加載然後調度...請將代碼上傳到某處 – 2013-04-19 07:06:22

相關問題