Zend framework 2/Модули
Модули
{{Готовность|0%}}
Модули
Модульная структура, Modules
Модули
В основе приложений построенных на Zend Framework 2 используется модульная система. В каждом модуле возможна начальная настройка( bootstrapping) , конфигурирование ошибок и роутинга для всего модуля. Так же указывается начальная страница. Но мы не будем использовать настройки по умолчанию, так как хотим, что б главная страница была - список альбомов.
Весь наш код будет находиться в отдельном модуле «Album», который будет содержать наши контроллеры(controllers), модели(models), формы(forms), шаблоны вида(views), конфигурационные файлы. Настройки будем проводить по мере необходимости.
Давайте начнем с необходимых каталогов(папок).
Настройка модуля «Album»
Начните с создания директории под названием «Album», которая будет содержать такие поддиректории:
zf2-tutorial/
/module
/Album
/config
/src
/Album
/Controller
/Form
/Model
/view
/album
/album
Как Вы заметили модуль «Album» содержит отдельные директории для различных типов файлов. Файлы PHP содержащие классы с пространством имен «Album» находятся в папке src/Album .То есть мы можем создавать необходимое количество пространств имен в каждом модуле. Папка с шаблонами видов «view» содержит поддиректорию «аlbum» для скриптов шаблонов вида.
Для загрузки и настройки модуля в Zend Framework 2 существует Менеджер Модуля(ModuleManager) . Он будет искать файл Module.php в корневом каталоге модуля (module/Album) в котором должен находиться класс с названием AlbumModule. Это означает, что все классы в модуле будут в пространстве имен с названием модуля(совпадает с именем директории модуля) .
Создайте файл Module.php в модуле Album.
// module/Album/Module.php namespace Album;
class Module {
public function getAutoloaderConfig()
{
return array(
'Zend\Loader\ClassMapAutoloader' => array(
__DIR__ . '/autoload_classmap.php',
),
'Zend\Loader\StandardAutoloader' => array(
'namespaces' => array(
__NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
),
),
);
}
public function getConfig()
{
return include __DIR__ . '/config/module.config.php';
}
}
ModuleManager автоматически вызывает методы getAutoloaderConfig() и getConfig().
Автозагрузка файлов
Наш метод getAutoloaderConfig() возвращает массив совместимый с Фабрикой Автозагрузки ZF2. Для его настройки добавим файл с картой классов(class map file) в ClassmapAutoloader, а также добавим пространство имен модуля в StandardAutoloader. Стандартному автозагрузчику необходимо указать название пространства имен и путь, по которому можно найти файлы, входящие в это пространство имен. Более подробно о такой структуре можете узнать в стандарте PSR-0.
Так как мы находимся в режиме разработки, у нас нет необходимости указывать карту классов(classmap), поэтому оставим просто пустой массив. Создайте файл autoload_classmap.php с таким содержимым:
// module/Album/autoload_classmap.php: return array();
Так как массив пуст, то автозагрузчик «вернется» и вызовет СтандартныйАвтозагрузчик(StandardAutoloader).
Настройка
После регистрации автозагрузчика давайте быстренько взглянем на метод getConfig() в AlbumModule. Он просто загружает файл config/module.config.php.
Создайте файл, содержащий конфигурации нашего модуля:
// module/Album/config/module.config.php:
return array(
'controllers' => array(
'invokables' => array(
'Album\Controller\Album' => 'Album\Controller\AlbumController',
),
),
'view_manager' => array(
'template_path_stack' => array(
'album' => __DIR__ . '/../view',
),
),
);
С помошью Менеджера Сервисов(ServiceManager) вся необходимая конфигурационная информация передается в соответствующие компоненты нашего приложения(модуля). Нам необходима пара массивов: controllers и view_manager. Массив «controllers» содержит описание всех контроллеров, которые есть в нашем модуле. Нам достаточно одного контроллера, AlbumController, к которому мы будем обращаться как к Album\Controller\Album. Имя контроллера должно быть уникальным в пределах всего модуля.
В массив view_manager мы передадим путь и имя папки, где будут находиться наши скрипты вида.
Подключение нового модуля к приложению(сайту)
Теперь необходимо подключить новый модуль к приложению, сообщив о нем ModuleManager. Для этого перейдем в файл config/application.config.php и добавим в массив modules наш новый модуль, как показано ниже:
// config/application.config.php:
return array(
'modules' => array(
'Application',
'Album', // <-- Add this line
),
'module_listener_options' => array(
'config_glob_paths' => array(
'config/autoload/{,*.}{global,local}.php',
),
'module_paths' => array(
'./module',
'./vendor',
),
),
);
Теперь можем приступить к программированию нашего модуля.