Примечание: Поддержка модулей доступна, начиная с версии 1.0.3.
Модуль — это самодостаточная программная единица, состоящая из моделей, представлений, контроллеров и иных компонентов. Во многом модуль схож с приложением. Основное различие заключается в том, что модуль не может использоваться сам по себе — только в составе приложения. Пользователи могут обращаться к контроллерам внутри модуля абсолютно также, как и в случае работы с обычными контроллерами приложения.
Модули могут быть полезными в нескольких ситуациях. Если приложение очень объемное, мы можем разделить его на несколько модулей, разрабатываемых и поддерживаемых по отдельности. Кроме того, некоторый часто используемый функционал, например, управление пользователями, комментариями и пр., может разрабатываться как модули, чтобы впоследствии можно было с легкостью воспользоваться им вновь.
Модуль организован как директория, имя которой выступает в качества уникального идентификатора модуля. Структура директории
модуля похожа на структуру базовой директории приложения. Ниже представлена
типовая структура директории модуля с именем forum
:
forum/ ForumModule.php файл класса модуля components/ содержит компоненты пользователя views/ содержит файлы представлений для виджетов controllers/ содержит файлы классов контроллеров DefaultController.php файл класса контроллеру по умолчанию extensions/ содержит сторонние расширения models/ содержит файлы классов моделей views/ содержит файлы представлений контроллера и макетов layouts/ содержит файлы макетов default/ содержит файлы представлений для контроллера по умолчанию index.php файл представления 'index'
Модуль должен иметь класс модуля, унаследованный от класса CWebModule. Имя класса определяется с использованием выражения
ucfirst($id).'Module'
, где $id
соответствует идентификатору модуля (или названию директории модуля). Класс модуля выполняет роль
центрального места для хранения совместно используемой информации. Например, мы можем использовать
CWebModule::params для хранения параметров модуля, а также CWebModule::components для совместного использования
компонентов приложения на уровне модуля.
Подсказка: Для создания каркаса модуля можно воспользоваться утилитой
yiic
. Например, чтобы создать модульforum
, нужно выполнить следующую последовательность команд в командной строке:% cd WebRoot/testdrive % protected/yiic shell Yii Interactive Tool v1.0 Please type 'help' for help. Type 'exit' to quit. >> module forum
Для использования модуля необходимо поместить папку модуля в директорию modules
базовой директории приложения. Далее необходимо объявить
идентификатор модуля в свойстве приложения modules. Например, чтобы воспользоваться модулем forum
,
приведенным выше, можно использовать следующую конфигурацию приложения:
return array(
......
'modules'=>array('forum',...),
......
);
Кроме того, модуль можно сконфигурировать с начальными значениями свойств. Порядок использования аналогичен порядку с компонентами
приложения. Например, модуль forum
может иметь в своем классе свойство с именем
postPerPage
, которое может быть установлено в конфигурации приложения
следующим образом:
return array(
......
'modules'=>array(
'forum'=>array(
'postPerPage'=>20,
),
),
......
);
К экземпляру модуля можно обращаться посредством свойства module активного в настоящий момент контроллера. Через экземпляр
модуля можно получить доступ к совместно используемой информации на уровне модуля. Например, для того, чтобы обратиться к упомянутому выше свойству
postPerPage
, мы можем воспользоваться следующим выражением:
$postPerPage=Yii::app()->controller->module->postPerPage;
// или таким, если $this ссылается на экземпляр контроллера
// $postPerPage=$this->module->postPerPage;
Обратиться к действию контроллера в модуле можно, используя маршрут moduleID/controllerID/actionID
.
Например, предположим, что все тот же модуль forum
имеет контроллер с именем PostController
, тогда мы можем использовать
маршрут forum/post/create
для того, чтобы обратиться к действию create
этого контроллера.
Адрес URL, соответствующий этому маршруту, будет таким: http://www.example.com/index.php?r=forum/post/create
.
Подсказка: Если контроллер находится в подпапке папки
controllers
, мы также можем использовать формат маршрута, приведенный выше. Например, предположим, что контроллерPostController
находится в папкеforum/controllers/admin
, тогда мы можем обратиться к действиюcreate
черезforum/admin/post/create
.
Модули могут быть вложенными, т.е. один модуль может содержать в себе другой. Первый мы будем называть модуль-родитель, второй - модуль-потомок.
Модули-потомки должны быть помещены в папку modules
модуля-родителя. Для обращения к действию контроллера в модуле-потомке, необходимо
использовать маршрут parentModuleID/childModuleID/controllerID/actionID
.
Signup or Login in order to comment.