Модули и макеты. Как привязать модуль к определенному макету (layout) в Zend Framework 2!

Опубликовано admin - чт, 09/27/2012 - 17:38

В Zend Framework 2 не так просто привязать к определённому макету определенный модуль. По умолчанию для всех модулей макет наследуется от предыдущих модулей, но как сделать, чтобы для каждого модуля был свой макет (шаблон).

Говоря о макете, я подразумеваю шаблон HTML и ничего больше.

Предположим Вы имеете структуру из следующих модулей (глобальный конфигурационный файл "application.config.php"):

В добавок к этому, для большей наглядности, структура моего модуля выглядит так:

Если вы определите глобальный шаблон в модуле "Application", то все последующие модули будут его наследовать, это одна из концепций Zend Framework 2. Концепция наследования часто встречается в Zend Framework 2, например все конфигурационные файлы так же наследуются собираясь в один. Не отходя от нашей цели - как же модулю, к примеру "Suggest", использовать свой макет, а не наследовать его от предыдущего модуля? Возможно, вам интересно и Вы думаете: "зачем этому модулю свой макет (шаблон)"? Мне понадобился для того чтобы возвращать "голый" html для ajax запроса, так как насколько я понял из документации представление в Zend Framework 2 может отображаться тремя способами для шаблона php, как json и RSS. Это мне не подошло, нужен был просто пустой шаблон с html.

Я нашёл два способа:

  • с использованием Module.php(или внутри класса Module);
  • или использовать представление модуля (представление для действия контроллёра);

 

Рассмотрим первый способ. Файл Module.php - стандартный файл, используемый по умолчанию во всех модулях, без которого модуль не будет работать. Итак, давайте откроем этот файл, у меня он первоначально выглядел следующим образом:

Основное значение в этом сниппете для нас имеет метод "onBootstrap", - это событие MVC, запускаемое при первоначальной загрузке модуля, срабатывает данное событие сразу после события "loadModule.post" ("The Module Class"). Итак, в этот метод нам нужно добавить новый обработчик события с негативным приоритетом, это будет выглядеть примерно следующим образом:

Соответственно сам обработчик будет выглядеть так:

Для псевдонима контроллера "suggestform" (который в нашем случае является основным классом модуля, у меня это "Suggest\Controller\SuggestController") мы производим проверку, если это он, то для него изменяем стандартный шаблон на "suggest"(suggest.phtml), который находится в папке layout.

Второй способ очень прост, нужно добавить в файл представления (view) в самый вверх код:

Например, мой шаблон выглядит следующим образом:

Вот и всё, сейчас каждому модулю можно задать свой шаблон!

На разработку сайта! Скидки до 20%!