Zend Framework — Пример организации модульной структуры проекта
Данный пример демонстрирует принципы и решения, описанные в статьях
- 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
так, как указано в соответствующих статьях. В результате должно получиться что-то вроде:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | [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
1 2 3 4 5 6 7 8 | [production] resources.layout.layout = "mainpage" [staging : production] [testing : production] [development : production] |
Шаблон для главной страницы:
application/layouts/scripts/mainpage.phtml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?php echo $this->doctype()."\n" ?> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <?php echo $this->headMeta()."\n" ?> <?php echo $this->headTitle()."\n" ?> <?php echo $this->headLink()."\n" ?> <?php echo $this->headScript()."\n" ?> </head> <body> <hr>/application/layouts/scripts/mainpage.phtml<hr> <?php echo $this->layout()->content; ?> <hr> </body> </html> |
Шаблон по умолчанию для остальных модулей, для которых не прописаны layout и layoutPath:
application/layouts/scripts/layout.phtml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?php echo $this->doctype()."\n" ?> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <?php echo $this->headMeta()."\n" ?> <?php echo $this->headTitle()."\n" ?> <?php echo $this->headLink()."\n" ?> <?php echo $this->headScript()."\n" ?> </head> <body> <hr>/application/layouts/scripts/layout.phtml<hr> <?php echo $this->layout()->content; ?> <hr> </body> </html> |
Модуль admin
Допустим, наша система администрирования должна иметь свой шаблон. Сконфигурируем и создадим layout.
Конфигурация:
application/modules/admin/configs/module.ini
1 2 3 4 5 6 7 8 9 | [production] resources.view.title = "RVSample Admin" resources.layout.layoutPath = "/layouts/scripts" [staging : production] [testing : production] [development : production] |
Шаблон:
application/modules/admin/layouts/scripts/layout.phtml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?php echo $this->doctype()."\n" ?> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <?php echo $this->headMeta()."\n" ?> <?php echo $this->headTitle()."\n" ?> <?php echo $this->headLink()."\n" ?> <?php echo $this->headScript()."\n" ?> </head> <body> <hr>/application/modules/admin/layouts/scripts/layout.phtml<hr> <?php echo $this->layout()->content; ?> <hr> </body> </html> |
Модуль static
Статичные страницы у нас будут построены по своему шаблону, со своим DOCTYPE
и могут кэшироваться браузером. Запишем соответствующие настройки в module.ini
и создадим layout.
Конфигурация:
application/modules/static/configs/module.ini
1 2 3 4 5 6 7 8 9 10 11 12 | [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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?php echo $this->doctype()."\n" ?> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <?php echo $this->headMeta()."\n" ?> <?php echo $this->headTitle()."\n" ?> <?php echo $this->headLink()."\n" ?> <?php echo $this->headScript()."\n" ?> </head> <body> <hr>/application/modules/static/layouts/scripts/layout.phtml<hr> <?php echo $this->layout()->content; ?> <hr> </body> </html> |
Модули, использующие параметры по умолчанию
Такие модули не требуют дополнительных настроек. Пример таких модулей в примере — somemodule
и somemodule2
.
Демонстрация работы примера
http://demo1.konovaltsev.ru/
http://demo1.konovaltsev.ru/admin/
http://demo1.konovaltsev.ru/static/
http://demo1.konovaltsev.ru/somemodule/
http://demo1.konovaltsev.ru/somemodule2/
Заключение
Скачать пример проекта в zip-архиве: zfsample001.zip
В файл не включены библиотеки Zend Framework. Предполагается, что фреймворк скачан, установлен и настроен.
Весь представленный код и его фрагменты можно использовать без каких либо ограничений.
При публикации данных статей или их фрагментов ссылка на источник (сайт http://konovaltsev.ru/) обязательна.
Вы можете отслеживать комментарии к этой записи с помощью RSS 2.0. Вы можете оставить комментарий, или использовать trackback с вашего сайта.
Спасибо за статью!!! Начал изучать ZF 1.10, дошел до модулей и два часа ищу нормальный док. по этой теме. Ваша статья — первое что мне наконец путёвое попалось. Спасибо еще раз!
спасибо за статью)