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',
       ),
   ),
);


Теперь можем приступить к программированию нашего модуля.