Содержание


The Module Class


The Module Class, ZF2, Zend Framework 2, ЗФ2





Минимальный модуль (A Minimal Module)

Например, есть модуль с именем «MyModule», тогда Zend\ModuleManager\Listener\ModuleResolverListener предполагает, что есть класс «MyModuleModule». Он использует стандартный автозагрузчик (обычно Zend\Loader\ModuleAutoloader) для поиска и подключения класса «MyModuleModule» в случае, если он еще не был загружен каким-то другим способом.

Структура каталогов модуля с именем «MyModule» для начала может выглядеть следующим образом.

MyModule/
    Module.php
В файле Module.php должен находиться класс «MyModuleModule»:
namespace MyModule;
 
class Module
{
}

Данный модуль представляет собой пособие для изучения и понимание и не несет никаких дальнейших целей. Хотя модуль «MyModule» на данный момент имеет все необходимое, что бы считаться полностью валидным модулем и может быть подгружен автозагрузчиком.

 

Класс «Module» служит единой точкой входа для слушателей ModuleManager и различных взаимодействий с этим модулем. Так же модули могут быть переопределены, предоставлять дополнительные настройки, выполнять задачи инициализации, такие как : регистрация автозагрузчика, сервисов и слушателей событий, зависимостей и многое другое.

 


Стандартный класс модуля (A Typical Module Class)

 

В примере ниже показано стандартное использование класса модуля:

namespace MyModule;
 
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';
    }
}


Событие «loadModules.post»

 

Для модуля небезопасно предполагать, что другие модули уже загружены во время вызова функции init(). Если у Вас есть необходимость выполнить какие -  либо действия после того, как все другие модули были загружены, событие менеджера модулей «loadModules.post» поможет в этом.

 

Пример использования события «loadModules.post»  :

use Zend\EventManager\EventInterface as Event;
use Zend\ModuleManager\ModuleManager;
 
class Module
{
    public function init(ModuleManager $moduleManager)
    {
        // Remember to keep the init() method as lightweight as possible
        $events = $moduleManager->getEventManager();
        $events->attach('loadModules.post', array($this, 'modulesLoaded'));
    }
 
    public function modulesLoaded(Event $e)
    {
        // This method is called once all modules are loaded.
        $moduleManager = $e->getTarget();
        $loadedModules = $moduleManager->getLoadedModules();
        $config        = $moduleManager->getConfig();
    }
}

Важно: init() метод вызывается для каждого модуля, реализующего этот метод, на каждой странице запроса и должен использоваться исключительно для «легких» задач, таких как регистрация слушателей событий или подобных.

 


MVC  событие «bootstrap»

 

Если Вы пишите MVC – ориентированное приложение на Zend Framework 2, то может возникнуть потребность в доступе к отдельным частям приложения в классе «Module», например, к Zend\Mvc\Application или к его зарегистрированному экземпляру в ServiceManager.  Для этогоВы можете использовать MVC событие «bootstrap» . Это событие вызывается после события «loadModule.post», когда вызывается $application->bootstrap().

Пример использования MVC  события «bootstrap»:

use ZendEventManagerEventInterface as Event;
 
class Module
{
    public function onBootstrap(Event $e)
    {
        // This method is called once the MVC bootstrapping is complete
        $application = $e->getApplication();
        $services    = $application->getServiceManager();
    }
}

Важно: onBootstrap () метод вызывается для каждого модуля, реализующего этот метод, на каждой странице запроса и должен использоваться исключительно для «легких» задач, таких как регистрация слушателей событий или подобных.


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