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

相关问题