3.3 Модуль
- 3.3.1 Обзор
- 3.3.2 Класс модуля
- 3.3.3 Actions
- 3.3.4 Controllers
- 3.3.5 i18n
- 3.3.6 Mappers и models
- 3.3.7 Templates
3.3.1 Обзор
Типичная структура модуля в приложении MZZ выглядит следующим образом:
- news/
- actions/
- controllers/
- i18n/
- mappers/
- models/
- templates/
- newsModule.php
3.3.2 Класс модуля
newsModule.php представляет собой класс, описывающий модуль.
class newsModule extends simpleModule { protected $classes = array( 'news', 'newsFolder'); protected $roles = array( 'moderator', 'user'); public function getRoutes() { return array( array(), array( 'newsFolder' => new requestRoute('news/:name/:action', array( 'module' => 'news', 'name' => 'root', 'action' => 'list'), array( 'name' => '.*?', 'action' => '(?:list|create|createFolder|editFolder|deleteFolder|moveFolder)')))); } }
Данный класс должен наследоваться от класса simpleModule и служит для хранения служебной информации о модуле. Так, к примеру, в данном классе содержится информация:
- о классах модуля (массив protected $classes)
- роли, используемые в модуле (todo: ссылка на соответствующий раздел)
- модуле-зависимые роуты (возвращается массив из двух элементов, в котором первый массив содержит роуты, которые должны быть добавлены в начало и второй массив - в конец)
- иконка модуля в admin-интерфейсе фреймворка
Помимо всего прочего, данный класс отвечает за получение мапперов и действий модуля, что позволит, к примеру, реализовать нестандартную схему получения маппера для объекта или создать так называемые multi-action контроллеры (todo: сделать раздел доки tricks и описать там такой финт)
3.3.3 Actions
В директории actions расположены файлы, определяющие набор возможных действий с каждой из сущностей модуля. Для модуля news это будут файлы news.php и newsFolder.php:
news.php:
<?php return array( 'view' => array( 'controller' => 'view' ), 'edit' => array( 'controller' => 'save', 'jip' => 1, 'role' => array('moderator'), 'icon' => 'sprite:mzz-icon/page-text/edit', 'lang' => true, 'main' => 'active.blank.tpl' ), 'move' => array( 'controller' => 'move', 'jip' => 1, 'role' => array('moderator'), 'icon' => 'sprite:mzz-icon/page-text/move' ), 'delete' => array( 'controller' => 'delete', 'jip' => 1, 'role' => array('moderator'), 'icon' => 'sprite:mzz-icon/page-text/del', 'confirm' => '_ news/confirm_delete', 'main' => 'active.blank.tpl' ), 'admin' => array( 'role' => array('moderator'), 'controller' => 'admin', 'title' => '_ admin', 'admin' => true ) ); ?>
В этом файле определены 5 действий: view, edit, move, delete и admin. Назначение этих действий легко определяется по их названию.
Рассмотрим пример простейшего actions-конфига:
<?php return array( 'view' => array( 'controller' => 'view', ) ); ?>
Как видно из примера, действие имеет только один обязательный параметр — controller. Представляет собой имя контроллера, который будет обслуживать данное действие.
Также, доступны следующие необязательные параметры для действий:
| Имя переменной | Описание | Принимаемые значения |
|---|---|---|
| main |
Main-шаблон для действия (todo: где описать для чего это? в процессе запуска приложения или прям тут?). Может принимать следующие значения:
Если данный параметр не задан, то по-умолчанию будет использоваться active.main.tpl шаблон. |
string |
| jip |
Является ли действие действием JIP (todo: ссылка на описание JIP).
Чтобы у модели было JIP-меню, в маппере необходимо подключить плагин jip.
|
int |
| jip_target | Указывает для JIP будет ли действие открываться в JIP-окне (по умолчанию) или будет открываться в новом окне/вкладке (значение 'new'). |
string |
| icon | Иконка действия (используется для JIP) (todo: ссылка на описание). | string |
| confirm | Сообщение перед выполнением действия (используется для JIP). | string |
| title | Заголовок действия (используется для JIP). Если строка начинается со знака "_", то значение возмется из i18n. | string |
| admin |
Является ли действие действием admin-части фреймворка. Если флаг выставлен в true, то данное действие будет отображаться
в административной части приложения (/admin), где дополнительно появится пункт в меню с названием этого действия,
параметр main будет выставлен в 'active.admin.tpl' (если не был выставлен в какое-то значение)
|
bool |
| role | Массив или строка ролей модуля, которым будем разрешен доступ к этому действию. Если данный параметр не указан, то доступ к действию разрешен всем. (todo: ссылка на описание механизма ролей) | array|string |
| route_name | Имя роута, который будет использоваться для построения URL'а этого действия, если используется JIP. | string |
| route.myparam |
Значение, которое будет подставлено в параметр myparam роута route_name (если используется).
В действии можно описать несколько параметров вида route.myparam для всех необходимых параметров роута.
В качестве значения этого параметра можно использовать имена методов модели, к которой относится данный экшн, в виде
'->getId' или '->getUser->getId'. Также можно использовать и скаляры.
|
string |
3.3.4 Controllers
Контроллеры предназначены для обеспечения взаимодействия моделей и отображения.
Подробнее о контроллерах читайте в соответствующем разделе.
3.3.5 i18n
В этой директории хранятся файлы локализации модуля (если она требуется). Файлы создаются отдельно для каждого из языков. Причём файлы должны именоваться следующим образом: <имя_языка>.ini. Например: en.ini.
todo ссылка на главу о i18n
3.3.6 Mappers и models
В каталоге mappers/ модуля хранятся мапперы классов, в каталоге models/ — соответствующие модели. Вместе эти классы являются частью компоненты Model
в парадигме MVC.
Подробнее про Model и MVC читайте в соответствующем разделе.
3.3.7 Templates
В этой директории хранятся smarty шаблоны