Установить различную компоновку для другого модуля в Zend Framework 2?

У меня есть два модуля Студент и Учитель. У меня также есть два разных макета: studentlayout.phtml, а другой – teacherlayout.phtml

Как я могу установить studentlayout для модуля Student и teacherlayout для Teachermodule?

Как ответ Пер Сэма. Спасибо, что он работает отлично.

но я также хочу установить два разных макета для Учителя. Поэтому я добавляю следующий код в свой основной файл конфигурации для проекта:

'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?

Применение

Использование EdpModuleLayouts очень, очень просто. В любом конфигурационном файле конфигурации или автозагружаемом файле конфигурации просто укажите следующее:

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

Это оно! Конечно, вам также нужно определить эти макеты … просто проверьте Модули приложений module.config.php чтобы узнать, как определить макет.

Если вы хотите изменить макет только для своего действия, вы можете использовать плагин layout () в действии ваших контроллеров или если вы хотите разный макет для всех действий на одном контроллере только в своем модуле, вы можете сделать это в бутстрапе:

 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')); }