Содержание


Модули


Модульная структура, 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 и" style="border-style:initial">view_manager.Массив «controllers» содержит описание всех контроллеров, которые есть в нашем модуле. Нам достаточно одного котроллера , " style="border-style:initial">AlbumController,  к которому мы будем обращаться как к  Album\Controller\Album. Имя контроллера должно быть уникальным в пределах всего модуля.

" style="color:#4f4e4e">В массив view_manager" style="color:#4f4e4e"> мы передадим  путь и имя папки, где будут находиться наши скрипты вида.

Подключение нового модуля к приложению(сайту)

Теперь необходимо подключить новый модуль к приложению, сообщив о нем 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',
        ),
    ),
);

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


Автор статьи: DuB