不同控制器的不同布局文件

Sin*_*hti 3 php zend-framework zend-framework-modules zend-framework2

如何让我的ZF2模块加载特定控制器的其他布局文件?

想想你IndexControllerAdminController你的ZF2应用模块中和IndexController是使用layout.phtml但要使用adminlayout.phtmlAdminController.

这怎么可能?

Sin*_*hti 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');
            }   
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

并且不要忘记通过在模块配置文件中添加此配置来注册新控制器:

'controllers' => array(
    'invokables' => array(
        'Application\Controller\Index' => 'Application\Controller\IndexController',
        'Application\Controller\Admin' => 'Application\Controller\AdminController',
    ),
),
Run Code Online (Sandbox Code Playgroud)

  • 只是想到其他人可能会读到这个.如果您认为需要不同的布局,可能会在您的建筑中改进一些内容.通常,您只需要一个布局.如果你需要两个布局,也许你应该有两个独立的应用程序(或两个单独的入口点).或者,您可能需要更加周到地使用新的ZF2嵌套视图模型系统......只是想法. (2认同)