Zend Framework — Пример организации модульной структуры проекта

Данный пример демонстрирует принципы и решения, описанные в статьях


В данной статье я опишу лишь основные моменты. Подробнее можно посмотреть все в архиве проекта.
Структура проекта (показано только основное):

.
├── 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

?Download 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

?Download 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

?Download 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

?Download 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

?Download 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

?Download 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 с вашего сайта.

Комментарии: 2 »

 
  • Олег:

    Спасибо за статью!!! Начал изучать ZF 1.10, дошел до модулей и два часа ищу нормальный док. по этой теме. Ваша статья — первое что мне наконец путёвое попалось. Спасибо еще раз!

  • Вася:

    спасибо за статью)

 

Добавить комментарий

XHTML: Можно использовать эти теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>