Данный пример демонстрирует принципы и решения, описанные в статьях
- Zend Framework – Модульная структуры проекта
- Zend Framework – Объединение конфигов с поддержкой модулей
- Zend Framework – Инициализация основных параметров view и layout для модуля
В данной статье я опишу лишь основные моменты. Подробнее можно посмотреть все в архиве проекта.
Структура проекта (показано только основное):
. ├── application │ ├── configs │ │ ├── application.ini │ │ └── module.ini │ ├── controllers │ ├── layouts │ │ └── scripts │ │ ├── layout.phtml │ │ └── mainpage.phtml │ ├── models │ ├── modules │ │ ├── admin │ │ │ ├── configs │ │ │ │ └── module.ini │ │ │ ├── controllers │ │ │ ├── layouts │ │ │ │ └── scripts │ │ │ │ └── layout.phtml │ │ │ ├── models │ │ │ └── views │ │ ├── somemodule │ │ │ ├── controllers │ │ │ ├── models │ │ │ └── views │ │ ├── somemodule2 │ │ │ ├── controllers │ │ │ ├── models │ │ │ └── views │ │ └── static │ │ ├── configs │ │ │ └── module.ini │ │ ├── controllers │ │ ├── layouts │ │ │ └── scripts │ │ │ └── layout.phtml │ │ ├── models │ │ └── views │ └── views ├── library │ └── RV │ ├── Application │ │ └── Resource │ │ └── Configlue.php │ └── Controller │ └── Plugin │ └── ModuleConfigLV.php └── public └── index.php
Создание проекта
Предполагается, что Zend Framework установлен и настроен, все пути прописаны.
заходим в директорию, где будет располагаться наш будущий проект и набираем:
zf create project ./
Затем создаем модули с контроллерами по умолчанию:
zf create module admin
zf create controller Index 1 admin
zf create module static
zf create controller Index 1 static
zf create module somemodule
zf create controller Index 1 somemodule
zf create module somemodule2
zf create controller Index 1 somemodule2
Пусть admin
будет модуль администрирования, static
– модуль для статичных страниц, для которых будет включено кэширование браузером. somemodule
и somemodule2
– модули, использующие настройки по умолчанию.
Далее включим поддержку шаблонов
zf enable layout
На этом работа с консольным инструментом zf для нас закончена.
Настройка модулей
Но модули просто так не заработают. Как я говорил – реализация модулей в Zend Framework не совсем полноценная и не до конца автоматизированна. Для того, чтобы модули заработали и их стало возможно адресовать в виде http://project_uri/modulename/
, мы пропишем в секцию production
файла application.ini
следующее:
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.modules[] =
Работа с описанными плагинами
Располагаем два нужных файла плагинов и редактируем application.ini
так, как указано в соответствующих статьях. В результате должно получиться что-то вроде:
[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
appnamespace = "Application"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.params.displayExceptions = 0
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/"
resources.layout.layout = "layout"
resources.view.doctype = "XHTML1_STRICT"
resources.view.encoding = "UTF-8"
resources.view.contentType = "text/html; charset=utf-8"
resources.view.title = "RVSample"
resources.view.titleSeparator = " :: "
resources.view.pragmaNoCache = "On"
autoloaderNamespaces.RV = "RV_"
pluginPaths.RV_Application_Resource = "RV/Application/Resource"
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.modules[] =
resources.configlue =
;Plugins
resources.frontController.plugins.moduleConfigLV = "RV_Controller_Plugin_ModuleConfigLV"
[staging : production]
[testing : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
resources.frontController.params.displayExceptions = 1
Теперь сконфигурируем модули и создадим layout-ы
Допустим у нас главная страница построена по своему шаблону, внутренние по своему. Соответственно модуль по умолчанию будет главной страницей со своим шаблоном:application/configs/module.ini
[production]
resources.layout.layout = "mainpage"
[staging : production]
[testing : production]
[development : production]
Шаблон для главной страницы:application/layouts/scripts/mainpage.phtml
<?php echo $this->doctype()."\n" ?>
<?php echo $this->headMeta()."\n" ?>
<?php echo $this->headTitle()."\n" ?>
<?php echo $this->headLink()."\n" ?>
<?php echo $this->headScript()."\n" ?>
<hr>
/application/layouts/scripts/mainpage.phtml
<hr>
<?php echo $this->layout()->content; ?>
<hr>
Шаблон по умолчанию для остальных модулей, для которых не прописаны layout и layoutPath:application/layouts/scripts/layout.phtml
<?php echo $this->doctype()."\n" ?>
<?php echo $this->headMeta()."\n" ?>
<?php echo $this->headTitle()."\n" ?>
<?php echo $this->headLink()."\n" ?>
<?php echo $this->headScript()."\n" ?>
<hr>
/application/layouts/scripts/layout.phtml
<hr>
<?php echo $this->layout()->content; ?>
<hr>
Модуль admin
Допустим, наша система администрирования должна иметь свой шаблон. Сконфигурируем и создадим layout.
Конфигурация:application/modules/admin/configs/module.ini
[production]
resources.view.title = "RVSample Admin"
resources.layout.layoutPath = "/layouts/scripts"
[staging : production]
[testing : production]
[development : production]
Шаблон:application/modules/admin/layouts/scripts/layout.phtml
<?php echo $this->doctype()."\n" ?>
<?php echo $this->headMeta()."\n" ?>
<?php echo $this->headTitle()."\n" ?>
<?php echo $this->headLink()."\n" ?>
<?php echo $this->headScript()."\n" ?>
<hr>
/application/modules/admin/layouts/scripts/layout.phtml
<hr>
<?php echo $this->layout()->content; ?>
<hr>
Модуль static
Статичные страницы у нас будут построены по своему шаблону, со своим DOCTYPE
и могут кэшироваться браузером. Запишем соответствующие настройки в module.ini
и создадим layout.
Конфигурация:application/modules/static/configs/module.ini
[production]
resources.layout.layoutPath = "/layouts/scripts"
resources.view.doctype = "HTML4_LOOSE"
resources.view.title = "Page"
resources.view.titleSeparator = ": "
resources.view.pragmaNoCache = "Off"
[staging : production]
[testing : production]
[development : production]
Шаблон:application/modules/static/layouts/scripts/layout.phtml
<?php echo $this->doctype()."\n" ?>
<?php echo $this->headMeta()."\n" ?>
<?php echo $this->headTitle()."\n" ?>
<?php echo $this->headLink()."\n" ?>
<?php echo $this->headScript()."\n" ?>
<hr>
/application/modules/static/layouts/scripts/layout.phtml
<hr>
<?php echo $this->layout()->content; ?>
<hr>
Модули, использующие параметры по умолчанию
Такие модули не требуют дополнительных настроек. Пример таких модулей в примере – somemodule
и somemodule2
.
Заключение
Весь представленный код и его фрагменты можно использовать без каких либо ограничений.
При публикации данных статей или их фрагментов ссылка на источник (сайт https://konovaltsev.ru) обязательна.
Спасибо за статью!!! Начал изучать ZF 1.10, дошел до модулей и два часа ищу нормальный док. по этой теме. Ваша статья – первое что мне наконец путёвое попалось. Спасибо еще раз!
спасибо за статью)