Спецификация контроллера в ZendFramework 2

У меня есть модуль в моем приложении zendframework 2, который содержит два контроллера. Я хочу установить другой макет для одного из действий контроллера. Есть ли способ установить его внутри файла конфигурации модуля?

Ps: Я просто попытался установить его внутри метода __CONSTRUCT контроллера, используя следующие команды, но он просто не работал!

$event = $this->getEvent(); $event->getViewModel()->setTemplate('layout/MYLAYOUT'); 

Но если я использую вышеуказанные команды внутри каждого действия моего контроллера, он просто отлично работает.

Я могу просто указать вам в правильном направлении, так как в настоящее время я не могу открыть образец проекта. Эван Кури опубликовал метод для модулей, соответствующих модулю. См. Следующие ссылки:

Специфичные макеты модуля в Zend Framework 2

 <?php namespace MyModule; use Zend\ModuleManager\ModuleManager; class Module { public function init(ModuleManager $moduleManager) { $sharedEvents = $moduleManager->getEventManager()->getSharedManager(); $sharedEvents->attach(__NAMESPACE__, 'dispatch', function($e) { // This event will only be fired when an ActionController under the MyModule namespace is dispatched. $controller = $e->getTarget(); $controller->layout('layout/alternativelayout'); }, 100); } } 

Теперь, как это вам поможет ?: Ну, $controller должен иметь как вызываемый контроллер, так и действие. Я уверен, что вы можете проверить $controller для вызываемого действия, а затем соответствующим образом назначить макет.

Мне жаль, что я могу в данный момент только намекнуть вам в направлении, но я уверен, что это может заставить вас начать.

См. Примеры akrabat для нескольких хороших способов, которыми макеты, представления и т. Д. Можно легко настроить.

В частности, то, что вы ищете, можно найти здесь .

Вот вырезка метода действия контроллера, который устанавливает / использует альтернативный макет:

 public function differentLayoutAction() { // Use a different layout $this->layout('layout/different'); return new ViewModel(); } 

Изменить: похоже, у akrabat есть пример, который говорит « Change the layout for every action within a module , что может дать лучшие указатели для настройки макета в конфиге; но я просто посмотрел на код, и пример в настоящее время не закончен, он не меняет макет.

@ Ответ Сэма в значительной степени отвечает на вопрос. Как уже говорилось, просто нужна проверка того, какой контроллер вызывается, что можно сделать следующим образом:

 <?php namespace MyModule; use Zend\ModuleManager\ModuleManager; class Module { public function init(ModuleManager $moduleManager){ $sharedEvents = $moduleManager->getEventManager()->getSharedManager(); $sharedEvents->attach(__NAMESPACE__, 'dispatch', function($e) { $controller = $e->getTarget(); if ($controller instanceof Controller\AltLayoutController) { $controller->layout('layout/alternativelayout'); } }, 100); } 

я