У меня есть модуль в моем приложении 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); }
я