Zend framework 2/Модули
Модули
[править]Модульная структура, 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', ), ), );
Теперь можем приступить к программированию нашего модуля.