在Zend Framework 2中为不同的模块设置不同的布局?

时间:2013-10-24 14:17:25

标签: php zend-framework2

我有两个模块学生和老师。 我还有两个不同的布局,一个是studentlayout.phtml,另一个是teacherlayout.phtml

如何为Teachermodule的Student模块和teacherlayout设置studentlayout?

按照Per Sam的回答。谢谢其工作正常。

但我也想为教师设置两种不同的布局。 所以我在项目的主配置文件中添加以下代码:

'module_layouts' => array(

    'Teacher' => array(
      'default' => 'layout/adminlayout',
      'login'    => 'layout/loginlayout',
    ),
    'Student' => 'layout/studentlayout',
),

我的教师模块的module.config.php文件:

    'module_layouts' => array(

    'Teacher' => array(
      'default' => 'layout/adminlayout',
      'login'    => 'layout/loginlayout',
    ),
      'Student' => 'layout/studentlayout',
 ),

但是所有教师模块的所有操作都采用adminlayout。为什么登录操作不能使用loginlayout?它的ovveride?

2 个答案:

答案 0 :(得分:3)

<强>用法

使用EdpModuleLayouts非常非常简单。在任何模块配置或自动加载的配置文件中,只需指定以下内容:

array(
    'module_layouts' => array(
        'Teacher' => 'layout/teacher',
        'Student' => 'layout/student'
    ),
);

就是这样!当然,您也需要定义这些布局...只需检查应用程序模块module.config.php以了解如何定义布局。

答案 1 :(得分:1)

如果您只想更改一个操作的布局,可以在控制器操作中使用layout()插件,或者如果您只想在模块中的一个控制器中为所有操作设置不同的布局,则可以在bootstrap中执行: / p>

public function onBootstrap(\Zend\EventManager\EventInterface $e) {
    $eventManager = $e->getApplication()->getEventManager();
    $sharedEventManager = $eventManager->getSharedManager();
    $sharedEventManager->attach('Auth\Controller\AuthController', \Zend\Mvc\MvcEvent::EVENT_DISPATCH, array($this, 'onDispatch'));
}

public function onDispatch(MvcEvent $e) {
    $controller = $e->getTarget();      
    $controller->layout('layout/loginLayout');
}

在该控制器中的每个操作之后,您将更改根ViewModel布局,您可以更进一步,并在此指定更多控制器,您希望您的布局像这样

$sharedEventManager>attach(array('Auth\Controller\AuthController',
'Auth\Controller\Registration'),
\Zend\Mvc\MvcEvent::EVENT_DISPATCH, array($this, 'onDispatch'));
}